Real 3D Engine to show object
Posted: Sat Nov 27, 2010 2:08 pm
Hello,
This is a real 3D programm, have fun... Sorry it is in french
Respect
This is a real 3D programm, have fun... Sorry it is in french
Code: Select all
@SCREEN {Mode = "ask", Width = 640, Height = 400}
SetFormStyle(#ANTIALIAS) ; Antialiasing sur le cube
FC=200
CX=160
CY=100
CZ=200
Function Controle()
If IsKeyDown("Left")=True Then Gauche() ; Vers la gauche
If IsKeyDown("Right")=True Then Droite() ; Vers la droite
If IsKeyDown("Up")=True Then Haut() ; Vers le Haut
If IsKeyDown("Down")=True Then Bas() ; Vers le bas
If IsKeyDown("RSHIFT")=True Then Zoomin() ; Zoom in
If IsKeyDown("RCONTROL")=True Then Zoomout() ; Zoom Out
EndFunction
Function Gauche()
AY=AY+1
If AY>359 Then AY=0
EndFunction
Function Droite()
AY=AY-1
If AY<0 Then AY=359
EndFunction
Function Haut()
AX=AX+1
If AX>359 Then AX=0
EndFunction
Function Bas()
AX=AX-1
If AX<0 Then AX=359
EndFunction
Function Zoomin()
CZ=CZ+10
If CZ>500 Then CZ=500
EndFunction
Function Zoomout()
CZ=CZ-10
If CZ<80 Then CZ=80)
EndFunction
Function PRG()
Controle() ; Exécution de la fonction Controle
; Réservation mémoire et création des tableaux
Dim CO[360] ; 360 cases réservé car une rotation c'est 360° pour le Cosinus
Dim SI[360] ; 360 cases réservé car une rotation c'est 360° pour le Sinus
Dim X[8] ; Un cube, c'est 8 points en X
Dim Y[8] ; Un cube, c'est 8 points en Y
Dim Z[8] ; Un cube, c'est 8 points en Z
Dim XE[8] ; Point final du cube a dessiner en X
Dim YE[8] ; Point final du cube a dessiner en Y
Dim ZZ[8] ; Point final du cube a dessiner en Z
Dim P1[12] ; Un cube, c'est 12 lignes (point de départ de la ligne)
Dim P2[12] ; Un cube, c'est 12 lignes (point final de la ligne)
Flip ; Flip d'écran pour le double buffer
Cls ; Effacement de l'écran sinon on verrait des cube partout lol
For I=0 To 359
CO[I]=Cos(I*0.1)*256 ; Mise en mémoire de 360 calcule du Cosinus des angles sur 360°
SI[I]=Sin(I*0.1)*256 ; Mise en mémoire de 360 calcule du Sinus des angles sur 360°
Next
For I=0 To 7
X = {-50,50,50,-50,-50,50,50,-50} ; Coordonnées des points dans l'espace en X
Y = {-50,-50,50,50,-50,-50,50,50} ; Coordonnées des points dans l'espace en Y
Z = {-50,-50,-50,-50,50,50,50,50} ; Coordonnées des points dans l'espace en Z
P1 = {0,1,2,3,4,5,6,7,0,1,2,3} ; Point de départ pour tracer la ligne
P2 = {1,2,3,0,5,6,7,4,4,5,6,7} ; Point d'arrivée pour tracer la ligne
;Calcule 3D grâce au magazine Dream N°27 de Mars 1996
Y1=(Y[I]*CO[AX]+Z[I]*SI[AX])/256
Z1=(-Y[I]*SI[AX]+Z[I]*CO[AX])/256
X1=(X[I]*CO[AY]+Z1*SI[AY])/256
ZZ[I]=(-X[I]*SI[AY]+Z1*CO[AY])/256
X=(X1*CO[AZ]+Y1*SI[AZ])/256
Y=(-X1*SI[AZ]+Y1*CO[AZ])/256
D=FC/(Sqrt(X^2+Y^2+(CZ+ZZ[I])^2))
XE[I]=320+X*D
YE[I]=200+Y*D
Next
; Calcule final
For I=0 To 11
GP1=P1[I]
GP2=P2[I]
X=XE[GP1]
Y=YE[GP1]
X1=XE[GP2]
Y1=YE[GP2]
Line (X,Y,X1,Y1,#WHITE) ; Traçage des lignes
Next
EndFunction
BeginDoubleBuffer
SetInterval(1,PRG,1000/50)
Repeat
WaitEvent
Forever