A.2 La testudo en la spaco

De la versio 0.9.92, la testudo povas eliri el la ebeno por moviĝi en la spaco. Por tio oni uzu la primitivon perspektive. Bonvenon en la mondon de la 3D-perspektivo!

A.2.1 La perspektiva teĥniko

Por prezenti la spacon tridimensian en ebeno nur dudimensia, oni uzu projektan perspektivon. Kamerao rigardas la 3D-scenon kaj ĝia vidado estas projektata sur intermezan ebenon. Jen skemo ilustranta tiun teĥnikon.

PIC

Kelkaj primitivoj ebligas loki la kameraon laŭ via volo, kun la projekta ekrano ĝuste je duona distanco.

A.2.2 Kompreni la movojn en la spaco

Sur la ebeno, testudan direkton difinas nur l’ angulo rilate al la vertikalo. En la spaco, la direkton donas 3 angulaj valoroj:

Efektive, por moviĝi en la spaco, la testudo kondutas kiel aviadilo. Jen malgranda skemo ebliganta prezenti tiujn magnitudojn:

PIC La flankklino

PIC La frontklino

PIC La direkto

Tio povas ŝajni komplikita komence, sed rimarku ke multaj aferoj rilatas al kutimaj movoj sur l’ ebeno.

an, antaŭen, man, malantaŭen n


Sama konduto kiel sur l’ ebeno.

dn, dekstren, mdn, maldekstren n


Same kondutas kiel sur l’ ebeno.

dfn, dekstraflanken n


La testudo pivotas dekstren laŭ ĝia longeca akso je n gradoj.

mdfn, maldekstraflanken n


La testudo pivotas madekstren laŭ ĝia longeca akso je n gradoj.

supren n


La testudo pivotas supren laŭ ĝia larĝeca akso je n gradoj.

malsupren n


La testudo pivotas supren laŭ ĝia larĝeca akso je n gradoj.

Sur l’ ebeno por grafiki kvadraton je latero 200:

 ripetu 4 [an 200 dn 90]

Tiuj komandoj restas validaj en la spaco, kaj la kvadrato estas desegnita perspektive. Se oni turnus «malsupren» la testudon je 90 gradoj oni povus grafiki tiam novan kvadraton.

ev  
ripetu 4 [an 200 dn 90]  
malsupren 90  
ripetu 4 [an 200 dn 90]

PIC

Restas trejni sin por lerni ĉiun eblan direkton!

Necesas ĉiuokaze kompreni ke la tri turnaj primitivoj estas reciproke ligitaj. Por ekzemplo, provu la jenan sinsekvon:

ev  
mdfn 90 supren 90 dfn 90

     

La movo farita estus egala al fari maldekstren 90 (provu simuli la testudon per via mano, ekzemple...).

A.2.3 Listo de aliaj primitivoj

Ĉiuj sekvaj primitivoj valoras en la spaco kaj sur l’ ebeno. La sola diferenco estas la naturo de la argumentoj atendataj aŭ la naturo de la respondoj. Por ekzemplo, la primitivo sitp ou situon_provizu atendas ĉiam liston kiel argumenton, sed nun necesas ke tiu listo enhavu tri nombrojn (x;y;z) reprezentantajn la spacajn koordinatojn de la dezirata punkto. Jen resumo de tiuj komandoj:

Primitivoj validaj kaj sur l’ ebeno kaj en la spaco





rond, rondon_desegnu ark, arkon_provizu o, originen diral, aldirektu




dist, distancon sitp, situon_provizu xp, x_provizu yp, y_provizu




dirp, direkton_provizu etikedu etikedlongon, etikl punkt, punkton_montru




sit, situon dir, direkton




Primitivoj validaj nur en moduso 3D

xyzp, xyz_provizu x y z


Tiu primitivo movas la testudon al la punkto kun koordinatoj indikitaj. Ĝi atendas tri argumentojn; tiu primitivo similas al sitp krom ke la koordinatojn oni ne indikas en listo.

Ekzemplo, xyzp -100 200 50: movu la testudon al punkto je koordinatoj x = -100;y = 200;z = 50.

zp, z_provizu z


Tiu primitivo movas la testudon al punkto kies koordinato z egalas l’ argumenton indikitan. Ĝi atendas do nombron kiel argumenton; tiu primitivo estas komparebla al xp kaj yp.

orientadon_provizu listo


Loku la testudon laŭ la dezirata klino. Tiu primitivo atendas liston enhavantan tri nombrojn, respektive la flankklinon, la frontklinon kaj la direkton.

Ekzemple, orientadon_provizu [100 0 58]: la testudo iĝos flankklina je 100 gradoj, frontklina je 0 gradoj kaj direkta je 58 gradoj.

orientadon


Redonas l’ orientadon de la testudo kiel liston enhavantan respektive la flankklinon, la frontklinon kaj la direkton. Atentu l’ ordon de tiuj nombroj; ekzemple, se l’ orientado estas [100 20 90], tio signifas ke por atingi la saman orientadon, de la komenca situo (ekzemple post viŝi l’ ekranon), necesos tajpi:

dekstraflanken 100 supren 20 dekstren 90

Se vi permutus l’ ordon de tiuj instrukcioj, vi ne akirus l’ orientadon deziratan!

flankklinon_provizu n


Pivotigu la testudon laŭ ĝia longeca akso tiel ke ĝi prenu l’ frankklinon indikitan.

flankklinon


Redonas la nunan valoron de la flankklina angula.

frontklinon_provizu n


Pivotigu la testudon laŭ ĝian larĝeca akso tiel ke ĝi prenu la frontklinan angulon indikitan.

frontklinon


Redonas la nunan valoron de la frontklinan angulon.

A.2.4 La 3D-modelilo

XLOGO havas modelilon 3D kiu ebligas montri vian tridimensian grafikaĵon en sceno kun lumoj kaj mallumoj. Tiu modulo uzas la bibliotekon JAVA3D kiu instalitu se vi volas profiti tiun kapablon.

Jen kiel uzi la modelilon:

Dum oni desegnas, post ĉiu grupo de komandoj, indiku al modelilo la geometriajn formojn kiujn ĝi konservu por estonta grafikado. Eblas registri plurlaterojn (surfacojn), liniojn, punktojn kaj eĉ tekstojn. Por tio, oni havas la jenajn primitivoj:

por_edro


Ĉiun sekvan movon oni registros por krei plurlateron.

fino_edro


La aro de la verticoj tra kiuj pasis la testudo post la voko de por_edro faras kvarlateron kies koloron establas l’ aro de verticoj. Tiu primitivo finas krei la plurlateron.

linia_difino


Ĉiun sekvan movon registru por krei sinsekvon de segmentoj.

linia_difinhalto


La aro de verticoj tra kiuj la testudo pasis post voki linia_difino materialigas plursegmentan linion. La primitivo finas difini la linion.

punkta_difino


Ĉiun sekvan movon registru por krei aron de punktoj.

punkta_difinhalto


Finu registri la aron de punktoj tra kiuj la testudo pasis post voki punkta_difino

teksta_difino


Ĉiam kiam l’ uzulo afiŝos tekston per la primitivo etikedu, ĝin oni registros por esti uzota de la modelido 3D.

teksta_difinhaltu


Finu registri la tekstojn afiŝatajn.

tridimensie_vidigu


Ekrulu la modelilon 3D; ĉiun objekton antaŭe registritan oni afiŝu sur l’ ekranon.

A.2.5 Krei kubon

Ĉiu faco estas kvadrato kun latero je 400 testudpaŝojn. Jen la programo;

por kvadrato  
# registru la verticojn de l’ kvadrato  
por_edro ripetu 4 [an 400 dn 90] fino_edro  
fino  
 
por simplaKubo  
# flava kubo  
ev perspektive skolp flavan  
# flankaj facoj  
ripetu 4 [kvadrato l dn 90 an 400 mdn 90 dfn 90 ml]  
# malsupra faco  
malsupren 90 kvadrato supren 90  
# supra faco  
an 400 malsupren 90 kvadrato  
# vidigo  
tridimensie_vidigu  
fino

Rulu la komandon simplaKubo:

PIC

Post anstataŭigi en la proceduro kvadrato, por_edro per linia_difinu kaj fino_edro per linia_difinhaltu:

PIC

Se oni uzus punkta_difino kaj punkta_difinhaltu anstataŭ linia_difinu kaj linia_difinhaltu, oni havus sur l’ ekrano nur la 8 verticojn de la kubo. Tiujn du primitivojn oni uzu por vidigi punktonubojn en la spaco.

A.2.6 Administri la lumojn

Por klarigi viajn 3D-scenojn vi povas uzi kvar lumojn. Apriore, la scenon klarigas du lumoj el tipo punkta. Klaku sur unu el la 4 ampuloj en la 3D-modelilo; la jena dialogfenestro aperos tiam:

PIC

Eblas pluraj elektoj de lumoj:

Plej bone oni simple provu ilin por kompreni ilian funkciadon!

Nebuleca efiko

Vi povas aldoni efikon kvazaŭ nebulan al via 3D-sceno. Klaku la butonon nuboforman en la 3D-modelilon; jen la dialogfenestro kiu aperas:

PIC

Du elekteblaj nebultipoj:

Ekzemplo kun grada nebulo:

PIC