Ich such später am Abend mal ein entsprechendes Beispiel im Source raus.
Here we go:
Code
REM>VectCube
REM ** Anzahl Ecken und Kanten
corners%=8
lines%=12
REM ** Nötige Felder dimensionieren
DIM v(2,corners%-1)
DIM w(2,corners%-1)
DIM m(2,2)
DIM x%(corners%-1)
DIM y%(corners%-1)
DIM l%(lines%-1,1)
REM ** Ecken einlesen
FOR j%=0 TO corners%-1
FOR i%=0 TO 2
READ v(i%,j%)
NEXT
NEXT
REM ** Kanten einlesen
FOR t%=0 TO lines%-1
READ l%(t%,0)
READ l%(t%,1)
NEXT
REM ** Anfängliche Eulerwinkel und
REM deren Änderungen festlegen
psi=2*PI*RND(1)
chi=2*PI*RND(1)
phi=2*PI*RND(1)
dpsi=.1*RND(1)-.05
dchi=.1*RND(1)-.05
dphi=.1*RND(1)-.05
REM ** 640x480 mono + Doublebuffering
MODE 128+25:OFF
ORIGIN 640,480
page%=1
REPEAT
REM ** Eulerwinkel verändern
phi+=dphi:phi=phi-2*PI*INT(phi/(2*PI))
psi+=dpsi:psi=psi-2*PI*INT(psi/(2*PI))
chi+=dchi:chi=chi-2*PI*INT(chi/(2*PI))
REM ** Transformationsmatrix aufbauen
Sphi=SINphi:Cphi=COSphi
Spsi=SINpsi:Cpsi=COSpsi
Schi=SINchi:Cchi=COSchi
m(0,0)= Cpsi*Cchi
m(0,1)=-Cpsi*Schi
m(0,2)= Spsi
m(1,0)= Cphi*Schi+Sphi*Spsi*Cchi
m(1,1)= Cphi*Cchi-Sphi*Spsi*Schi
m(1,2)=-Sphi*Cpsi
m(2,0)= Sphi*Schi-Cphi*Spsi*Cchi
m(2,1)= Sphi*Cchi+Cphi*Spsi*Schi
m(2,2)= Cphi*Cpsi
REM ** Alle Ecken transformieren ...
w()=m().v()
REM ** und auf Bildschirm projizieren
FOR t%=0 TO corners%-1
x%(t%)=800*w(0,t%)/(w(2,t%)+4)
y%(t%)=800*w(1,t%)/(w(2,t%)+4)
NEXT
REM ** Auf versteckter Seite zeichnen
SYS "OS_Byte",112,page%:CLS
FOR t%=0 TO lines%-1
MOVE x%(l%(t%,0)),y%(l%(t%,0))
DRAW x%(l%(t%,1)),y%(l%(t%,1))
NEXT
REM ** und nach dem VSync umschalten
WAIT:SYS "OS_Byte",113,page%
page%=3-page%
UNTIL INKEY(-99)
END
:
REM ** Eckenliste
DATA 1,1,1, -1,1,1, -1,-1,1, 1,-1,1
DATA 1,1,-1, -1,1,-1, -1,-1,-1, 1,-1,-1
:
REM ** Kantenliste
DATA 0,1, 1,2, 2,3, 3,0
DATA 4,5, 5,6, 6,7, 7,4
DATA 0,4, 1,5, 2,6, 3,7
Alles anzeigen
Yep, keine Zeilennummern.
In der 54. Zeile transformiert die Matrix-Multiplikation w()=m().v() gleich alle Ecken des Würfels auf einmal. ![]()
Viele Grüße,
Michael