Napis LECAD v VRML jeziku

Seminarska naloga pri predmetu Racunalnisko Podprto Konstruiranje

Univerza v Ljubljani
Fakulteta za strojnistvo
Laboratorij za CAD - LECAD
Univerzitetni studij
Predavatelj: izr.prof. Dr. Joze Duhovnik, dipl.ing.
Asistent: Mag. Leon Kos, dipl.ing.
 
 
 


Kazalo:

1. Uvod

2. Zahteve naloge

3. Resitev naloge

4. Osnove VRML jezika

4.1. Splosno

4.2. Vozlisca

4.3. Razlaga uporabljenih vozlisc

4.3.1. CUBE

4.3.2. INDEXED FACE SET

4.3.3. COORDINATE3

4.3.4. MATERIAL

4.3.5. TRANSLATION

4.3.6. KAMERA

4.3.6.1. PerspectiveCamera 4.3.7. LUC 4.3.7.1. DirectionalLight

4.3.7.2. SpotLight

5. Opis datoteke LECAD.WRL

6. Zajete slike napisa LECAD

 


Abstract

    This work represents 3D inscription written in VRML language. Content of inscription is "LECAD" and it is lit by two lights. One is coloured blue and illuminates the scene from left, the other is red and illuminates from left behind. For better representation is used perspective camera which direction is rectangular to the inscription and it is centered with it.

    File named lecad.wrl is simple ASCII file. The version of VRML language used in this file is 1.0, although today also VRML 2.0 is ready for use. For viewing the scene I recommend using the COSMO PLAYER 2.0 which integrates as plug-in with INTERNET EXPLORER or NETSCAPE.
 
    Once starting that program and loading file LECAD.WRL the scene can be freely rotated, translated and view from particular point can be easily reached.

 


1. Uvod

    Internet je v svojem razvoju dozivel velik razmah. Zacetki so sli preko razvoja TCP/IP infrastrukture, do razvoja enotnih naslovov lokacij URL (Universal Resource Locator). S tem je bil omogocen prenos raznih podatkov od ene lokacije do druge, nastale so najrazlicnejse WWW (World Wide Web) strani. Tako se je udomacil tudi nacin zapisa teh strani, imenovan HTML (Hyper Text Markup Language). Vse je lepo in prijazno, le da ima eno pomanjkljivost: prostor ni tri dimenzionalen, temvec le dvo dimenzionalen.

    Prav zaradi teh razlogov in zelje, da bi ljudje bili intenzivneje v srediscu Interneta, so v Zenevi priredili konferenco o vmesnikih navidezne resnicnosti v spletu WWW (Birds-of-a-Feather). Potreba po skupnem zapisu 3D prostora s "hyper" povezavami je bila torej podana. VRML se je sprva imenoval Virtual Reality Markup Language, kasneje pa se je "Markup" preimenoval v "Modeling", za boljso razlago kratice.

    Kot osnovo za zapis 3D prostora so se med raznimi moznostmi odlocili za Open Inventor ASCII File Format (v nadaljevanju Open Inventor) podjetja Silicon Graphics, Inc. Open Inventor je objektno orientirano orodje oz. knjiznica objektov in metod, s katerimi se obvladuje 3D podrocje. Predstavlja popolne opise 3D scen, renderiranje poligonskih objektov, osvetljevanje, podporo materialom, efekte za povecanje realnosti itd. VRML predstavlja podmnozico Open Inventorja; samo najbolj pogosto uporabljene lastnosti Open Inventorja. Na ta nacin so se delno izognili tezavam komunikacij (predvsem premajhna prepustnost).

    Naslednja lastnost VRML je neodvisnost, na kateri platformi se VRML dokument nahaja oz. izvaja (pregleduje). Zaradi hitrosti racunanja 3D scen in prikazovanja je pomembna lastnost dolocanja stopenj natancnosti prikazovanja LOD (Levels of Detail). Najrealneje se VRML dokumenti obnasajo na zmogljivih racunalnikih Silicon Graphics, SUN, DEC itd.

    Lastnost, ki se je ne more prezreti, je izvedba oz. kontrola premikanja. Trenutno je na razpolago le miska in tipkovnica, kar je zaenkrat se premalo realno.

 

2. Zahteve naloge

Izdelati je potrebno primer datoteke lecad.wrl s 3D modelom crk napisa LECAD in uporabo osnovnih primitivov. Porocilo naj vsebuje tudi kratek opis jezika VRML.

 

3. Resitev naloge

    Ker VRML standard se ne podpira teksta v trodimenzionalnem nacinu, se je potrebno crk v trorazseznostnem prostoru lotiti postopoma. Vsako crko se da predstaviti z ze vnaprej definiranimi primitivi (kocka oz. kvader, valj, krogla, stozec,…), ki jih podpira standard. S postavljanjem primitivov enega ob drugega pa lahko dobimo zelena telesa v prostoru - enostavne crke.

    Enostavne crke, kot so E, F, H, I, L, T, ... dobimo ze s pravilno postavitvijo razlicno velikih kvadrov v prostoru. Pri crkah A, K, M, N, V, Z je potrebno poseci ze po rotacijskih transformacijah. Mnogo vec dela pa zahtevajo crke, kot so B, C, D, G, J, O, P, R, S, U ... Ce zelimo, da so crke res simetricne in pravilnih oblik, je treba njihovo obliko preracunati, saj "freehand" tehnika tu odpove, ker je potrebno koordinate podajati rocno. Eventuelno lahko pridemo do tock tudi s pomocjo boljsega risarskega programa.

 

4. Osnove VRML jezika

4.1. Splosno

    V nadaljevanju je opisana razlicica jezika VRML 1.0. Razvoj jezika se trenutno nahaja pri koncani specifikaciji razlicice VRML 2.0 (ki naj ne bi bila kompatibilna z VRML 1.0).
    Vsa koda, ki se prenasa je v ASCII obliki. Lahko pa se zapis dodatno kompresira (gzip), pregled cesar vecina pregledovalnikov ze podpira.

    Treba je poudariti, da to ni jezik za pisanje animacij oz. cesar podobnega; namenjen je izkljucno opisu objektov, letu cez navidezno pokrajino in komunikacijo z drugimi navideznimi svetovi (vse kar je po MIME - Multipurpose Internet Mail Extensions - standardu). Teoreticno je lahko objekt karkoli, 3D scena, MIDI (Musical Instrument Digital Interface) podatki, JPEG (Joint Photographics Experts Group) slika itd.

VRML ima nekaj objektov ze definiranih. Ti objekti se imenujejo vozlisca (nodes).
 

4.2. Vozlisca

    Vozlisca so urejena in predstavljajo hierarhicno strukturo, imenovano scenski graf (scene graph), pri cemer je vrstni red vozlisc zelo pomemben (objektna orientiranost). Vozlisca, ki so prej zapisana, vplivajo na tista, zapisana za njimi.

Lastnosti vozlisc:
        - tip vozlisca (kocka, krogla, tekst, tekstura, preslikava, ...)
        - parametri vozlisca (razlicno dolgi robovi kocke, ...) (fields)
        - ime vozlisca (vozlisce ima lahko samo eno ime, isto ime ima lahko vec vozlisc)
        - podrejena vozlisca t.i. otroci (child nodes). Vozlisca z otroki se opirajo na vozlisca za povezovanje (group nodes)

Sintaksa zapisa vozlisca:

DEF Kocka Cube {}   #pravilno
DEF 1Kocka Cube {}  #nepravilno
#VRML V1.0 ascii
Vse, kar je zapisano za tem v tej isti vrstici, se ignorira.
DirectionalLight {    # direktna luc
Vsi nasteti primeri so ekvivalentni:
ambientColor  0.2 0.2 0.2
ambientColor [0.2 0.2 0.2]
ambientColor [0.2 0.2 0.2,]
Parametri vozlisca so lahko nasteti v eni vrstici, v vec, ali pa jih ni. Vrstni red prav tako ni pomemben. Vsi parametri, ki v bloku { } niso zapisani, se obravnavajo kot privzeti (default). Na ta nacin se obseg VRML dokumenta zmanjsa.
AsciiText {
  string        "Hello"
  justification CENTER
}
je popolnoma enako kot
AsciiText { justification CENTER string "Hello" }
{       #zacetek
  ...
}       #konec
#VRML V1.0 ascii
Separator {
  ...
}
Najpomembnejse med vozlisci je vsekakor vozlisce Separator (t.i. locilec). V dokumentu mora nastopiti najmanj en taksen Separator, imenovan Root Separator (korenski locilec). Osnova za nadaljnje razvijanje obseznih dokumentov je naslednji dokument, ki je v bistvu ze zakljucena celota, ceprav nicesar ne vsebuje:
#VRML V1.0 ascii
Separator {
  #prazna scena
}
Kot primer je zanimiv naslednji zapis scene, ki vsebuje rdeco kroglo in modro kocko, osvetljeno z lucjo.
#VRML V1.0 ascii
Separator {
  DirectionalLight {                                    #luc
    direction 0 0 -1
  }
  PerspectiveCamera {                                   #kamera
    position      -8.6 2.1 5.6
    orientation   -0.1352 -0.9831 -0.1233 1.1417
    focalDistance  10.84
  }
  Separator {                                           #krogla
    Material {                                          #rdeca barva
      diffuseColor 1 0 0
    }
    Translation { translation 3 0 1}                    #premik krogle
    Sphere {                                            #krogla
      radius 2.3
    }
  }
  Separator {                                           #kocka
    Material {                                          #modra barva
      diffuseColor 0 0 1
    }
    Transform {                                         #transformacija
      translation -2.4 .21                              #premik
      rotation     0   1 1 .9                           #rotacija
    }
    Cube {}                                             #kocka
  }
}
  

4.3. Razlaga uporabljenih vozlisc

V nadaljenvanju so razlozena samo vozlisca, ki so bila uporabljena pri zahtevani nalogi:

    Pogosto v dokumentu pridemo do situacije, da neko vozlisce pripada razlicnim drugim vozliscem (je njihovo vozlisce otrok). Ta lastnost se v VRML kaze z ukazoma DEF in USE. Z DEF dodelimo vozliscu ime, z USE in imenom prej definiranega vozlisca pa povemo, da se bo to vozlisce spet uporabilo. Ce ima vec vozlisc isto ime, se bo uporabilo tisto, ki je bilo zadnje difinirano

4.3.1. CUBE

    Vozlisce predstavlja kvader, po prednastavitvi pa kocko (sirine 2,visine 2 in globine 2). Sredisce kvadra je postavljeno v trenutno koordinatno izhodisce. Parametri po vrsti predstavljajo velikosti po oseh X (sirina), Y (visina) in Z (globina).

Parametri:
width - sirina kvadra
height - visina kvadra
depth - globina kvadra

primer kocke:
#VRML V1.0 ascii
Separator
{
    Cube{}
}

4.3.2. INDEXED FACE SET

    Uporabimo pri kreiranju 3D objektov s pomocjo zapolnjenih poligonov oz ploskev. Koordinate objekta morajo biti podane ze prej z vozliscem Coordinate3. Objekt se kreira tako, da se pri parametru coordIndex definirajo vse njegove ploskve s poligoni. Poligon pa se definira tako, da se nastejejo indeksi koordinat, kot bodo povezane. Prva koordinata, zapisana pod Coordinate3 ima indeks 0. Posamezne poligone med seboj locimo s stevilko tocke -1 kot dolocilo, da je poligon zakljucen in da mogoce sledi nov poligon.

Parametri:
coordIndex - nasteti indeksi vseh poligonov, ki sestavljajo 3D objekt
materialIndex - nasteti indeksi materialov po poligonih
normalIndex - nasteti indeksi normal po poligonih
textureCoordIndex - nasteti indeksi koordinat tekstur po poligonih

primer proste povrsine:
#VRML V1.0 ascii
Separator {
  Coordinate3 {                            #koordinate prisekane piramide
    point [ -2 0 2, 2 0 2, 2 0 -2, -2 0 -2,
            -1 2 1, 1 2 1, 1 2 -1, -1 2 -1
    ]
  }
  IndexedFaceSet {
    coordIndex [ 0, 1, 2, 3, -1,  4, 5, 6, 7, -1,  0, 1, 5, 4, -1,
                 1, 2, 6, 5, -1,  2, 3, 7, 6, -1,  3, 0, 4, 7, -1
    ]
  }
 }

4.3.3. COORDINATE3

Vozlisce je nujno potrebno za vozlisce IndexedFaceSet. Namenjeno je dolocanju koordinat na sceni, same tocke pa niso vidne. Vsaki koordinati pripada trojica stevil (X,Y,Z). Prva koordinata ima indeks 0, naslednja 1, itn.

Parametri:
point - polje poljubnih 3D koordinat

primer:
#VRML V1.0 ascii
Separator {
  Coordinate3 {                             #koordinate prisekane piramide
    point [ -2 0 2, 2 0 2, 2 0 -2, -2 0 -2,
            -1 2 1, 1 2 1, 1 2 -1, -1 2 -1
    ]
  }
  IndexedLineSet {
    coordIndex [ 0, 1, 2, 3, -1,  4, 5, 6, 7, -1,  0, 1, 5, 4, -1,
                 1, 2, 6, 5, -1,  2, 3, 7, 6, -1,  3, 0, 4, 7, -1
    ]
  }
}

4.3.4. MATERIAL

    Vozlisce predstavlja izbiro materiala za objekt oz. kako se objekt vidi na svetlobi. Dolociti se da veliko lastnosti, ceprav se pri obicajnih scenah uporablja le nekaj od teh lastnosti. Razlicni objekti interpretirajo vec definiranih materialov razlicno.
    Mocneje, kot luc sveti na objekt, bolj so barva in vsi odboji svetlobe na objektu vidni.
    Parametri (razen transparency) pri tem vozliscu so enaki, kot so definirani pri OpenGL lighting modelu. Obstajajo se nekateri drugi, ki pa jih VRML ne podpira.
    Za pregledovalnike s slabimi lastnostmi (low-end rendering systems) velja, da podpirajo popolno transparentnost, kaj vec pa ne. Vrednost, vecjo od 0.5 tretirajo kot popolno transparentnost, manjso pa brez transparentnosti. Podobne tezave imajo pri parametru specularColor. Ponavadi tudi ne dopuscajo, da so nekateri objekti osvetljeni, drugi pa ne.
    Tukaj je treba biti pozoren, da polje [ ] pri parametru ni enako temu, da parameter ni zapisan.

Parametri:
ambientColor - barva objekta, ko ni posebej osvetljen oz. ne upostevajo se koti padcev svetlobe na objekt
diffuseColor - osnovna barva objekta z vsemi odboji svetlobe
specularColor - barva izvora svetlobe na objektu (ponavadi bela pika svetlobe na objektu)
emissiveColor - barva objekta v senci
shininess - odbijanje svetlobe v kombinaciji s specularColor

transparency - transparentnost Primeri barv:

    [diffuseColor 1 0 0]          [diffuseColor 0 1 1]             [diffuseColor 0 1 0]             [diffuseColor 0 0 1]         [diffuseColor 1 1 0]          [diffuseColor 1 0 1]

Primeri transparentnosti:

            [transparency 0.3]                  [transparency 0.6]                          [transparency 0.9]                        [transparency 1]               [transparency 0]

 
4.3.5. TRANSLATION

    Vozlisce predstavlja poljuben premik objekta v prostoru. Premik mora biti podan z 3D vektorjem.

Parametri:
translation - 3D vektor premika
 

4.3.6. KAMERA

VRML pozna dva tipa kamer:

    Po prednastavitvah sta obe kameri postavljeni na lokacijo (0,0,1) in "gledata" v smeri osi -Z. Lahko obstaja vec kamer na razlicnih lokacijah z razlicnimi pogledi (povezava z vozliscem Switch). Na tak nacin lahko preko povezav (hyper links) isto sceno gledamo iz vec zacetnih pogledov. Najveckrat pa se na sceno pozicionira ena kamera in potem v odvisnosti od pregledovalnika pogledamo sceno - ponavadi en objekt ali ograjen prostor (room) - z vseh strani. Ce na sceni ni niti ene kamere, vsi pregledovalniki postavijo kamero v (0,0,1). Kamere se ne smejo gnezditi v blokih { } in definirane morajo biti pred objekti.

4.3.6.1. PerspectiveCamera

    Vozlisce predstavlja kamero, katere projekcija uporablja tudi perspektivo. Zaradi tega so objekti videti nekoliko "popaceni". Projekcijski zarki imajo obliko prisekane piramide.
    Lepi efekti se dobijo s spreminjanjem parametra heightAngle, kar izgleda kot menjavanje fotolec pri kameri (neke vrste zoomiranje). Z izbiro prevelikega kota pride do efekta t.i. ribje oko (fish eye). Za izracun vrednosti parametra heightAngle pripomore naslednja formula:

heightAngle = 2 * arctan (height /(2 * focalDistance))
PerspectiveCamera uposteva transformacije.

Parametri:
position - pozicija kamere na sceni
orientation - smer gledanja s kamero
focalDistance - razdalja od kamere do tocke v prostoru (kombinacija s position in orientation)
heightAngle - kot za izbiro fotolece
 

4.3.7. LUC

VRML pozna tri vrste luci:

    Vsem lucem se lahko nastavlja intenzivnost osvetlitve (intensity) v rangu od 0 do 1, barva svetlobe, ki je po prednastavitvi bela in dejstvo, ali luc sploh sveti ali ne (on). Za gradnjo virtualnih svetov oz. scen naj se uporablja cim manj luci (cas renderiranja se obcutno poveca). V kolikor ni definirane nobene luci, postavi pregledovalnik na sceno eno luc sam. Tockasti izvori svetlobe naj bodo postavljeni za hrbet kamere.

4.3.7.1. DirectionalLight

    Vozlisce predstavlja usmerjeno luc (reflektor). Svetloba se siri po osi, podani s parametrom direction. DirectionalLight uposteva transformacije. Posebno pozornost je treba posvetiti postavitvi luci. Objekti, zapisani pred tem vozliscem oz. v drugem bloku ({ }), niso osvetljeni s to lucjo.

Parametri:
on - aktivnost luci

intensity - intenzivnost osvetlitve
color - barva luci
direction - smer luci, tridimenzionalen vektor

4.3.7.2. SpotLight

    Vozlisce predstavlja najrealnejs luc od vseh moznih. Postavljena je na fiksne koordinate na sceni. Njena svetloba se siri v obliki stozca (dlje od izvora je sirsi). Intenzivnost svetlobe pada eksponentno od sredisca proti robu stozca snopa svetlobe. SpotLight uposteva transformacije. Posebno pozornost je treba posvetiti postavitvi luci. Objekti, zapisani pred tem vozliscem oz. v drugem bloku ({ }), niso osvetljeni s to lucjo.

Parametri:
on - aktivnost luci

intensity - intenzivnost osvetlitve
color - barva luci
location - koordinate luci
direction - smer snopa svetlobe
dropOffRate - padec intenzivnosti svetlobe proti robu stozca
cutOffAngle - kot snopa svetlobe (stozca)
 

5. Opis datoteke LECAD.WRL

    Nacina konstruiranja 3D crk, opisanega v poglavju 3., sem se lotil tudi pri napisu LECAD. Crki L in E sem dobil le s pravilno postavitvijo sestih kvadrov, medtem ko sem za ostale crke uporabil IndexFaceSet (pogl. 4.3.2) vozlisce, ki omogoca kreiranje poljubnih ploskev (plascev) v prostoru.

    Za crko A sem definiral dvaindvajset tock, ki sem jih med sabo povezal v smiseln poligon. Nekoliko vec tock je bilo potrebnih pri crki D, se vec pa pri crki C. Crka C dejansko vsebuje 3D kolobar, katerega vsaka polovica sluzi za zavihke crke C, medtem ko je ravni del spet iz kvadra (Cube).

Uporabil sem tudi vozlisce za uporabo luci in kamer, da sem dobil zeleni zacetni kader.

vsebina datoteke LECAD.WRL

--------------------------

#VRML V1.0 ascii
#by Mike

Material {diffuseColor 0.804 0.70196 0.1137} #Zlato-rumena barva crk

PerspectiveCamera {                             #za zacetni kader je uporabljena kamera s perspektivo
    position 15 3.5 20                          
}

DirectionalLight{ #usmerjena luc
    on TRUE
    intensity 1
    color 0 0 1                                 #reflektor je modre barve
    direction -1 1 0                            #na napis sveti z desnega spodnjega kota
}

SpotLight {                                     #navadna luc
    on TRUE
    intensity 1
    color 1 0 0                                 #luc sveti rdece
    location 0 -5 4                             #postavljena je pod in pred napis in sveti v desno
    direction 1 1 -1                                            
}

DEF letter-L Separator {                        #definicija crke L
    Translation { translation 0.5 3.5 0 }
    Cube { height 7 width 1 depth 2 }
    Translation { translation 2 -3 0 }
    Cube { height 1 width 3 depth 2 }
    Translation { translation 3.5 -0.5 0 }
}
Translation { translation 5.5 0 0 }             #translacija koord.sist. za crko E

DEF letter-E Separator {                        #definicija crke E
    Translation {translation .5 3.5 0}
    Cube {height 7 width 1 depth 2}
    Translation {translation 2.25 3 0}
    Cube {height 1 width 3.5 depth 2}
    Translation {translation -0.75 -3 0}
    Cube {height 1 width 2 depth 2}
    Translation {translation 0.75 -3 0}
    Cube {height 1 width 3.5 depth 2}
    Translation {translation 4.5 -.5 0}
}
Translation {translation 6 0 0}                 #translacija koord.sist. za crko C

DEF letter-C Separator {                        #definicija crke C
    Translation {translation .5 3.5 0}
    Cube {height 2 width 1 depth 2}
    Translation {translation -.5 -3.5 0}
    Coordinate3 {                               #koordinate 103 tock crke C
        point[4 4.5 -1,3.949 4.888 -1,3.799 5.25 -1,3.561 5.561 -1,
                3.25 5.799 -1,2.888 5.949 -1,2.5 6 -1,2.112 5.949 -1,
                1.75 5.799 -1,1.439 5.561 -1,1.201 5.25 -1,1.051 4.888 -1,
                1 4.5 -1,
                4 4.5 1,3.949 4.888 1,3.799 5.25 1,3.561 5.561 1,
                3.25 5.799 1,2.888 5.949 1,2.5 6 1, 2.112 5.949 1,
                1.75 5.799 1,1.439 5.561 1,1.201 5.25 1,1.051 4.888 1,
                1 4.5 1,
                5 4.5 -1,4.915 5.147 -1,4.665 5.75 -1,4.268 6.268 -1,
                3.75 6.665 -1,3.147 6.915 -1,2.5 7 -1,1.853 6.915 -1,
                1.25 6.665 -1,0.732 6.268 -1,0.335 5.75 -1,0.085 5.147 -1,
                0 4.5 -1,
                5 4.5 1,4.915 5.147 1,4.665 5.75 1,4.268 6.268 1,
                3.75 6.665 1,3.147 6.915 1,2.5 7 1,1.853 6.915 1,
                1.25 6.665 1,0.732 6.268 1,0.335 5.75 1,0.085 5.147 1,
                0 4.5 1,
                4 2.5 -1,3.949 2.111 -1,3.799 1.75 -1,3.561 1.439 -1,
                3.25 1.201 -1,2.888 1.051 -1,2.5 1 -1,2.112 1.051 -1,
                1.75 1.201 -1,1.439 1.439 -1,1.201 1.75 -1,1.051 2.111 -1,
                1 2.5 -1,
                4 2.5 1,3.949 2.111 1,3.799 1.75 1,3.561 1.439 1,
                3.25 1.201 1,2.888 1.051 1,2.5 1 1,2.112 1.051 1,
                1.75 1.201 1,1.439 1.439 1,1.201 1.75 1,1.051 2.111 1,
                1 2.5 1,
                5 2.5 -1,4.915 1.853 -1,4.665 1.25 -1,4.268 0.732 -1,
                3.75 0.335 -1,3.147 0.085 -1,2.5 0 -1,1.853 0.085 -1,
                1.25 0.335 -1,0.732 0.732 -1,0.335 1.25 -1,0.085 1.853 -1,
                0 2.5 -1,
                5 2.5 1,4.915 1.853 1,4.665 1.25 1,4.268 0.732 1,
                3.75 0.335 1,3.147 0.085 1,2.5 0 1,1.853 0.085 1,
                1.25 0.335 1,0.732 0.732 1,0.335 1.25 1,0.085 1.853 1,
                0 2.5 1
            ]
    }
    IndexedFaceSet {                                 #zapis indeksov in povezava v smiseln poligon
        coordIndex [0,1,2,3,4,5,6,7,8,9,10,11,12,25,24,23,22,21,
                    20,19,18,17,16,15,14,13,-1,
                    26,27,28,29,30,31,32,33,34,35,36,37,38,51,50,
                    49,48,47,46,45,44,43,42,41,40,39,-1,
                    0,26,39,13,-1,
                    0,1,2,3,4,5,6,7,8,9,10,11,12,38,37,36,35,34,33,
                    32,31,30,29,28,27,26,-1,
                    13,14,15,16,17,18,19,20,21,22,23,24,25,51,50,49,
                    48,47,46,45,44,43,42,41,40,39,-1,
                    52,53,54,55,56,57,58,59,60,61,62,63,64,77,76,75,
                    74,73,72,71,70,69,68,67,66,65,-1,
                    78,79,80,81,82,83,84,85,86,87,88,89,90,103,102,
                    101,100,99,98,97,96,95,94,93,92,91,-1,
                    52,78,91,65,-1,
                    52,53,54,55,56,57,58,59,60,61,62,63,64,90,89,88,
                    87,86,85,84,83,82,81,80,79,78,-1,
                    65,66,67,68,69,70,71,72,73,74,75,76,77,103,102,
                    101,100,99,98,97,96,95,94,93,92,91,-1
        ]
    }
}
Translation {translation 6 0 0}                         #translacija koord.sist. za crko A

DEF letter-A Separator {                                #definicija crke A
    Coordinate3 {                                       #koordinate 21 tock crke A
        point[0 0 -1,2.5 7 -1,3.5 7 -1,6 0 -1,5 0 -1,1 0 -1,3 5.5 -1,1.455 1.25 -1,
                1.818 2.25 -1,4.545 1.25 -1,4.182 2.25 -1,
                0 0 1,2.5 7 1,3.5 7 1,6 0 1,5 0 1,1 0 1,3 5.5 1,1.455 1.25 1,
                1.818 2.25 1,4.545 1.25 1,4.182 2.25 1]
    }
    IndexedFaceSet {                                     #doloceno zaporedje indeksov tock crke A
        coordIndex [0,1,6,5,-1,1,6,2,-1,6,2,3,4,-1,7,8,10,9,-1,
                    11,12,17,16,-1,12,13,17,-1,17,13,14,15,-1,
                    18,19,21,20,-1,
                    0,11,12,1,-1,1,2,13,12,-1,2,3,14,13,-1,
                    3,4,15,14,-1,0,5,16,11,-1,
                    5,6,17,16,-1,6,4,15,17,-1,
                    7,9,20,18,-1,8,10,21,19,-1]
    }
}
Translation {translation 7 0 0}                           #translacija koord.sist. za crko D

DEF letter-D Separator {                                  #definicija crke D
    Translation {translation .5 3.5 0}
    Cube {height 7 width 1 depth 2}                       #postavitev stirih kvadrov pri crki D
    Translation {translation 1.5 3 0}
    Cube {height 1 width 2 depth 2}
    Translation {translation 0 -6 0}
    Cube {height 1 width 2 depth 2}
    Translation {translation 2.5 3 0}
    Cube {height 3 width 1 depth 2}
    Translation {translation -1.5 1.5 0}
    Coordinate3 {                                          #koordinate tock zgornje cetrtinke kolobarja
        point[1 0 -1,0.956 0.259 -1,0.866 0.5 -1,0.707 0.707 -1,
                0.5 0.866 -1,0.259 0.956 -1,0 1 -1,
                2 0 -1,1.932 0.518 -1,1.732 1 -1,1.414 1.414 -1,
                1 1.733 -1,0.518 1.932 -1,0 2 -1,
                1 0 1,0.956 0.259 1,0.866 0.5 1,0.707 0.707 1,
                0.5 0.866 1,0.259 0.956 1,0 1 1,
                2 0 1,1.932 0.518 1,1.732 1 1,1.414 1.414 1,
                1 1.733 1,0.518 1.932 1,0 2 1
        ]
    }
    IndexedFaceSet {                                         #zaporedje indeksov tock v smiseln poligon
        coordIndex [0,1,2,3,4,5,6,13,12,11,10,9,8,7,-1,
                    0,1,2,3,4,5,6,20,19,18,17,16,15,14,-1,
                    7,8,9,10,11,12,13,27,26,25,24,23,22,21,-1,
                    14,15,16,17,18,19,20,27,26,25,24,23,22,21,-1
        ]
    }
    Translation {translation 0 -3 0}
    Coordinate3 {                                            #koordinate tock zgornje cetrtinke kolobarja
        point[1 0 -1,0.956 -0.259 -1,0.866 -0.5 -1,0.707 -0.707 -1,
                0.5 -0.866 -1,0.259 -0.956 -1,0 -1 -1,
                2 0 -1,1.932 -0.518 -1,1.732 -1 -1,1.414 -1.414 -1,
                1 -1.733 -1,0.518 -1.932 -1,0 -2 -1,
                1 0 1,0.956 -0.259 1,0.866 -0.5 1,0.707 -0.707 1,
                0.5 -0.866 1,0.259 -0.956 1,0 -1 1,
                2 0 1,1.932 -0.518 1,1.732 -1 1,1.414 -1.414 1,
                1 -1.733 1,0.518 -1.932 1,0 -2 1
        ]
    }
    IndexedFaceSet {                                         #zaporedje indeksov tock v smiseln poligon
        coordIndex [0,1,2,3,4,5,6,13,12,11,10,9,8,7,-1,
                    0,1,2,3,4,5,6,20,19,18,17,16,15,14,-1,
                    7,8,9,10,11,12,13,27,26,25,24,23,22,21,-1,
                    14,15,16,17,18,19,20,27,26,25,24,23,22,21,-1
        ]
    }
}

6. Zajete slike napisa LECAD

Vse slike napisa LECAD sem dobil s pomocjo VRML pregledovalnika Cosmo player 2.0 kot "plug-in" programu Netscape 4.0:

 
 
 
 
 
 Izdelal: Mihael Bogataj
 
 


E-mail : miha.bogataj@kiss.uni-lj.si


NASLOV:
Miha Bogataj
Lojzeta Hrovata 7
4000 Kranj
Slovenija
+386 64 323-059