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.

pict

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:

pict La flankklino
pict La frontklino
pict 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]
pict

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:

pict

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

pict

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:

pict

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:

pict

Du elekteblaj nebultipoj:

Ekzemplo kun grada nebulo:

pict