Test de mon petit moteur 3D filaire Hollywood
3 sujets de 16 à 18 (sur un total de 18)
- 1
- 2
-
Oups, j’avais oublié, voici le code Hollywood de mon projet:
@SCREEN {Mode = « ask », Width = 640, Height = 400}
FC=200
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(« a »)=True Then Zoomin() ; Zoom in
If IsKeyDown(« z »)=True Then Zoomout() ; Zoom Out
If IsKeyDown(« p »)=True Then SetFillStyle(#FILLCOLOR) ; Zoom Out
If IsKeyDown(« o »)=True Then SetFillStyle(#FILLNONE)
If IsKeyDown(« i »)=True Then SetFillStyle(#FILLGRADIENT, #LINEAR, $888888, $FFFFFF)
If IsKeyDown(« u »)= True Then SetFormStyle(#ANTIALIAS)
If IsKeyDown(« y »)= True Then SetFormStyle(#NORMAL)
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>600 Then CZ=600
EndFunction
Function Zoomout()
CZ=CZ-10
If CZ<150 Then CZ=150
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 Cosin us
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[10] ; Polygone 1
Dim P2[10] ; Polygone 2
Dim P3[10] ; Polygone 3
Dim P4[10] ; Polygone 4
Dim P5[10] ; Polygone 5
Dim P6[10] ; Polygone 6
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=Cos(I*0.1)*360 ; Mise en mémoire de 360 calcule du Cosinus des angl es sur 360°
SI=Sin(I*0.1)*360 ; 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’esp ace en X
Y = {-50,-50,50,50,-50,-50,50,50} ; Coordonnées des points dans l’esp ace en Y
Z = {-50,-50,-50,-50,50,50,50,50} ; Coordonnées des points dans l’esp ace en Z
;P={0,1,2,3,1,5,6,2,4,5,1,0,4,5,6,7,4,0,3,7,3,2,6,7}
;Calcule 3D grâce au magazine Dream N°27 de Mars 1996
Y1=(Y*CO[AX]+Z*SI[AX])/360
Z1=(-Y*SI[AX]+Z*CO[AX])/360
X1=(X*CO[AY]+Z1*SI[AY])/360
ZZ-X*SI[AY]+Z1*CO[AY])/360
X=(X1*CO[AZ]+Y1*SI[AZ])/360
Y=(-X1*SI[AZ]+Y1*CO[AZ])/360
D=FC/(Sqrt(X^2+Y^2+(CZ+ZZ)^2))
XE=320+X*D
YE=200+Y*D
Next
; Calcule final
P1 = {XE[0],YE[0],XE[1],YE[1],XE[2],YE[2],XE[3],YE[3],XE[0],YE[0]} ; Polygon 1
P2 = {XE[1],YE[1],XE[5],YE[5],XE[6],YE[6],XE[2],YE[2],XE[1],YE[1]} ; Polygon 2
P3 = {XE[4],YE[4],XE[5],YE[5],XE[1],YE[1],XE[0],YE[0],XE[4],YE[4]} ; Polygon 3
P4 = {XE[4],YE[4],XE[5],YE[5],XE[6],YE[6],XE[7],YE[7],XE[4],YE[4]} ; Polygon 4
P5 = {XE[4],YE[4],XE[0],YE[0],XE[3],YE[3],XE[7],YE[7],XE[4],YE[4]} ; Polygon 5
P6 = {XE[3],YE[3],XE[2],YE[2],XE[6],YE[6],XE[7],YE[7],XE[3],YE[3]} ; Polygon 6
Box (0,0,640,200,$3333EE)
Locate (0,0)
Print (« Flèche => Rotation cube »)
Locate (0,12)
Print (« Touche a => Zoom OUT »)
Locate (0,24)
Print (« Touche z => Zoom IN »)
Locate (0,36)
Print (« Touche p => coloration de Garnier »)
Locate (0,48)
Print (« Touche o => annuler la coloration »)
Locate (0,60)
Print (« Touche i => Un monde d’acier « )
Locate (0,72)
Print (« Touche u => Antialiasing »)
Locate (0,84)
Print (« Touche y => enlever l’Antialiasing »)
Locate (0,96)
Print (« Ctrl+c => Quitter »)
; Traçage des polygones avec tests
; les tests se font sur la coordonnées en Z
; en gros si le polygone passe derrière les autres alors il s’affiche pas
; je crois que normalement sa fais gagner du temp CPU… Non?
If ZZ[1]+ZZ[5]+ZZ[6]+ZZ[2]<-40 Then Polygon (0,0,P2,5,#BLUE) If ZZ[4]+ZZ[5]+ZZ[1]+ZZ[0]<-40 Then Polygon (0,0,P3,5,#RED) If ZZ[0]+ZZ[1]+ZZ[2]+ZZ[3]>40 Then Polygon (0,0,P4,5,#YELLOW)
If ZZ[1]+ZZ[5]+ZZ[6]+ZZ[2]>40 Then Polygon (0,0,P5,5,#WHITE)
If ZZ[4]+ZZ[5]+ZZ[1]+ZZ[0]>40 Then Polygon (0,0,P6,5,#GREEN)
If ZZ[0]+ZZ[1]+ZZ[2]+ZZ[3]<-40 Then Polygon (0,0,P1,5,#PURPLE) EndFunction BeginDoubleBuffer SetInterval(1,PRG,1000/50) Repeat WaitEvent Forever
Eclatez-vous bien
3 sujets de 16 à 18 (sur un total de 18)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Test de mon petit moteur 3D filaire Hollywood