
@+
J'ai pondu exactement le même code que lui XDcomtois a écrit :Pour le clipSprite3d il y a aussi un excellent code de S.M.
http://purebasic.hmt-forum.com/viewtopic.php?t=4265
Et c'est vrai que ça en ouvre des perspectives
Code : Tout sélectionner
; Trium Engine
; initialisation materiel
If InitSprite() And InitKeyboard() : Else : End : EndIf
If OpenScreen(800,600,16,"Trium ") = 0
End
EndIf
SetFrameRate(0)
; creations tableaux / variables
Structure Vertex
x1.f
y1.f
z1.f
x2.w
y2.w
EndStructure
Dim Vertice.Vertex(100)
; structure du cube
Vertice(0)\x1 = -100 : Vertice(0)\y1 = -100 : Vertice(0)\z1 = -100
Vertice(1)\x1 = 100 : Vertice(1)\y1 = -100 : Vertice(1)\z1 = -100
Vertice(2)\x1 = 100 : Vertice(2)\y1 = 100 : Vertice(2)\z1 = -100
Vertice(3)\x1 = -100 : Vertice(3)\y1 = 100 : Vertice(3)\z1 = -100
Vertice(4)\x1 = -100 : Vertice(4)\y1 = -100 : Vertice(4)\z1 = 100
Vertice(5)\x1 = 100 : Vertice(5)\y1 = -100 : Vertice(5)\z1 = 100
Vertice(6)\x1 = 100 : Vertice(6)\y1 = 100 : Vertice(6)\z1 = 100
Vertice(7)\x1 = -100 : Vertice(7)\y1 = 100 : Vertice(7)\z1 = 100
Declare Display_()
Declare Ligne(a,b)
Declare Rotation_Y(a,b.f)
Declare Rotation_Z(a,b.f)
Declare Rotation_X(a,b.f)
; boucle
Repeat
ClearScreen(0,0,0)
For x = 0 To 7
rotation_y(x,0.01)
Next x
display_()
ligne(0,1): ligne(1,2)
ligne(2,3): ligne(3,0)
ligne(4,5): ligne(5,6)
ligne(6,7): ligne(7,4)
ligne(0,4): ligne(1,5)
ligne(2,6): ligne(3,7)
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
; procedures
Procedure Display_()
StartDrawing(ScreenOutput())
For x = 0 To 7
vertice(x)\x2 = (256*Vertice(x)\x1)/(Vertice(x)\z1+250) + 400
vertice(x)\y2 = (256*Vertice(x)\y1)/(Vertice(x)\z1+250) + 300
Next x
StopDrawing()
EndProcedure
Procedure Ligne(a,b)
StartDrawing(ScreenOutput())
FrontColor(26, 23, 229)
LineXY( vertice(a)\x2,vertice(a)\y2,vertice(b)\x2,vertice(b)\y2 )
StopDrawing()
EndProcedure
Procedure rotation_Y(a,b.f)
Longueur.f = Sqr( Pow(vertice(a)\x1,2) + Pow(vertice(a)\z1,2) )
angle.f = ACos(vertice(a)\x1 / Longueur.f)
If vertice(a)\z1 < 0 : angle.f = 6.28318530-angle.f : EndIf
angle.f = angle.f + b.f
vertice(a)\x1 = Cos(angle.f)*Longueur.f
vertice(a)\z1 = Sin(angle.f)*Longueur.f
EndProcedure
Procedure rotation_X(a,b.f)
Longueur.f = Sqr( Pow(vertice(a)\z1,2) + Pow(vertice(a)\y1,2) )
angle.f = ACos(vertice(a)\z1 / Longueur.f)
If vertice(a)\y1 < 0 : angle.f = 6.28318530-angle.f : EndIf
angle.f = angle.f + b.f
vertice(a)\z1 = Cos(angle.f)*Longueur.f
vertice(a)\y1 = Sin(angle.f)*Longueur.f
EndProcedure
Procedure rotation_Z(a,b.f)
Longueur.f = Sqr( Pow(vertice(a)\x1,2) + Pow(vertice(a)\y1,2) )
angle.f = ACos(vertice(a)\x1 / Longueur.f)
If vertice(a)\y1 < 0 : angle.f = 6.28318530-angle.f : EndIf
angle.f = angle.f + b.f
vertice(a)\x1 = Cos(angle.f)*Longueur.f
vertice(a)\y1 = Sin(angle.f)*Longueur.f
EndProcedure
Oui tu as mis le tempsTersaKen a écrit :Je me suis enfin mis au Pure Basic ( il en a fallu du temps )
je vois pas de fonctions, juste l'exeTersaKen a écrit :Voici un cube ... montrant ma fonction triangle et le tri de facea telecharger ici