Pages vues depuis 25/07/2007 : 25 395 946
Index du forum »» Création-Développement »» J'ai réussi mon tit moteur 3D
@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