You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Fig. 2 - Gli assi dello<br />
schermo.<br />
nale e sarà, quindi,<br />
necessario eseguire<br />
su esso una proie-<br />
zione prospettica dei<br />
punti tridimensionali.<br />
Come tutti hanno<br />
studiato sin dalle<br />
scuole medie, l'uso<br />
della prospettiva nel<br />
tracciamento di un'immagine fa in modo che gli oggetti più<br />
lontani, risultino più piccoli e contemporaneamente con-<br />
vergano verso il punto di fuga. Nel nostro caso, i punti non<br />
diminuiranno di dimensione, ma in base all'aumento della<br />
loro distanza convergeranno verso il punto di fuga, che<br />
corrisponde all'origine degli assi cartesiani. Questo nei<br />
computer equivale normalmente alle coordinate dello<br />
schermo XFO YFO, ossia nell'estremità in alto a sinistra,<br />
ma per migliorare l'effetto globale delle rappresentazioni<br />
tridimensionali (e il tracciamento di punti 3D è una di que-<br />
ste) conviene spesso traslare verso il centro l'origine degli<br />
assi.<br />
Inoltre, per semplificarsi la vita, è conveniente che l'osser-<br />
vatore non si trovi esattamente all'origine degli assi (0,0,0),<br />
ma sia leggermente traslato sull'asse Z di una costante che<br />
chiameremo zo@ In questo modo l'algebra risulta più sem-<br />
plice, e la proiezione viene centrata sullo schermo del<br />
computer. L'osservatore prende quindi le coordinate<br />
(O,O,zoff), dove zoff è negativo.<br />
in pratica, ogni stella (o punto) definita da tre coordinate<br />
Xp, Yp e Zp che la definiscono nello spazio 3D, per essere<br />
tracciata sullo schermo 2D, dovrà essere sottoposta a una<br />
semplice proiezione, che ricaverà due nuove coordinate Xs<br />
e Ys. Matematicamente, per una semplice similitudine fra<br />
triangoli, si ottiene nel modo che segue:<br />
Xs = (zoff * Xp) / (Zp + zoff)<br />
Ys = (zoff * Yp) / (Zp + zoff)<br />
Ora non resta che traslare le coordinate ottenute verso il<br />
centro dello schermo, sommando le due costanti di trasla-<br />
zione xoffe yo@ Per concludere, la proiezione completa di<br />
un punto 3D (Xp,Yp,Zp) in un spazio 2D (Xs, Ys) awiene<br />
quindi tramite le due seguenti formule:<br />
XS = xoff + [ (zoff * Xp) / (Zp + zoff) ]<br />
Ys = yoff + [ (zoff * Yp) / (zp + zoff) ]<br />
guaggio che più ci aggrada e cominciare a tracciare il numero<br />
di punti che desideriamo.<br />
Come già anticipato, in questa occasione abbiamo deciso<br />
di utilizzare il linguaggio assembly, per permettere anche ai<br />
possessori di macchine più lente di veder funzionare il<br />
proprio campo stellare, senza dover ricorrere a tecniche<br />
particolari di tracciamento, come per esempio il double-<br />
buffering, necessarie quando si lavora in C e specialmente<br />
in maniera system-friendly.<br />
Cominciamo quindi con il convertire le formule di proie-<br />
zione in una forma comprensibile per il nostro Arniga:<br />
Projection:<br />
;Prende Xp e lo moltiplica per zoff<br />
m0ve.w Xp,DO<br />
muls #zoff ,DO ;Xp=Xp*zoff<br />
;Prende Yp e lo moltiplica per zoff<br />
m0ve.w Yp,D1<br />
muls #zoff ,D1 ;Yp=Yp*zoff<br />
;Prende Zp e vi somma zoff<br />
m0ve.w Zp,D2<br />
add.w #zoff,D2 ;Zp=Zp+zoff<br />
;Se Zp è 0, evita la divisione<br />
beq SkipDivision<br />
;Divide Xp e Yp per Zp<br />
divs D2,DO ; Xs=Xp/Zp<br />
divs D2,Dl ;Ys=Yp/Zp<br />
SkipDivision:<br />
;Somma la traslazione a Xs e Ys<br />
add.w #xoff,DO ;Xs=Xs+xoff<br />
add.w #yoff,Dl ;Ys=Ys+yoff<br />
;Memorizza le coordinate di schermo<br />
;ottenute dalla proiezione<br />
m0ve.w D0,Xs<br />
m0ve.w D1,Ys<br />
rts<br />
Visto che questo compito sarà eseguito per un certo nume-<br />
ro di punti (difficilmente avremo una singola stella che va-<br />
ga nello spazio), per una serie di proiezioni, è conveniente<br />
utilizzare due tavole: la prima, composta da triplette di<br />
word, definisce i punti 3D; la seconda, costituita da coppie<br />
di word, in numero equivalente alle triplette già citate, con-<br />
tiene i risultati di ciascuna proiezione.<br />
Ipotizziamo per esempio di voler eseguire la proiezione<br />
delle coordinate di cinque stelle, definite nella tavola<br />
Tab3Q le coordinate proiettate, verranno depositate nella<br />
tavola Tab2D come si vede nel listato 1.<br />
Stampiamo i punti<br />
Dalla teoria alla pratica<br />
Fino a questo punto abbiamo lavorato esclusivamente sulle<br />
coordinate dei punti; è giunto finalmente il momento di<br />
Adesso che sappiamo come proiettare un punto 3D sullo iniziare a stamparli sullo schermo. Per il momento iniziereschermo,<br />
non resta che convertire la procedura nel lin- mo con un semplice schermo a due colori (1 bitplane) in