4.3. Razlaga uporabljenih vozlisc
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.
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.
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.
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.
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).
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 asciiVse, kar je zapisano za tem v tej isti vrstici, se ignorira.
DirectionalLight { # direktna luc
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 { ... }
#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
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{}
}
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
]
}
}
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 ] } }
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
Primeri transparentnosti:
[transparency 0.3]
[transparency 0.6]
[transparency 0.9]
[transparency 1]
[transparency 0]
Vozlisce predstavlja poljuben premik objekta v prostoru. Premik mora biti podan z 3D vektorjem.
Parametri:
translation - 3D vektor premika
VRML pozna dva tipa kamer:
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))
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
VRML pozna tri vrste luci:
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
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
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
]
}
}
Vse slike napisa LECAD sem dobil s pomocjo VRML pregledovalnika Cosmo player 2.0 kot "plug-in" programu Netscape 4.0: