DésoléDr. Dri a écrit :(sauf qu'à la fin j'avais envie de gerber lol)

DésoléDr. Dri a écrit :(sauf qu'à la fin j'avais envie de gerber lol)
Code : Tout sélectionner
;Pole sud
*PtrV\px=0
*PtrV\py=0
*PtrV\pz=-1
CalculNormale
*PtrV\Couleur=MaCouleur(Random(255),Random(255),Random(255))
*PtrV\u=0
*PtrV\v=0
*PtrV + SizeOf(Vertex)
;Pole nord
*PtrV\px=0
*PtrV\py=0
*PtrV\pz=1
CalculNormale
*PtrV\Couleur=MaCouleur(Random(255),Random(255),Random(255))
*PtrV\u=0
*PtrV\v=0
Code : Tout sélectionner
;- Initialisation
If InitEngine3D() = 0
MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
End
EndIf
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse()=0
MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
End
ElseIf OpenScreen( 800 , 600 , 32 , "M3D_Matrix3D" ) = 0
MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
End
EndIf
Structure Vertex
px.f
py.f
pz.f
nx.f
ny.f
nz.f
co.l
tu.f
tv.f
EndStructure
Structure Face
p1.w
p2.w
p3.w
p4.w
p5.w
p6.w
EndStructure
Structure s_Cube
No.l
EndStructure
Structure s_Angle
AngleX.f
AngleY.f
AngleZ.f
EndStructure
Macro MaCouleur(Rouge,Vert,Bleu)
Rouge << 16 + Vert << 8 + Bleu
EndMacro
;-Texture
For i = 0 To 2
CreateTexture(i,64,64)
StartDrawing(TextureOutput(i))
Box(0,0,64,64,$111111)
If i = 0
Box(1,1,62,62,$FFFFFF)
ElseIf i=1
Box(1,1,62,62,$FF)
Else
Box(1,1,62,62,$00FF00)
EndIf
StopDrawing()
;-Material
CreateMaterial(i,TextureID(i))
Next i
MaterialAmbientColor(0,-1)
;-Entity
Global Taille=50
Global AngleX.f,AngleY.f,AngleZ.f
Global Dim Entity.s_Angle(26)
;Création de 3 entitys
;L'entity 0 est mobile
;Les entitys 1 et 2 sont fixes , elles servent de repère
No=0
z = 1
y = 2
x = 2
For r = 0 To 2
*Ptr.Vertex=AllocateMemory(SizeOf(Vertex)*24)
CopyMemory(?Vertices,*Ptr,SizeOf(Vertex)*24)
CreateMesh(No,10)
;Couleur dessus
*Mem.Vertex = *Ptr
For i = 0 To 3
*Mem\co=MaCouleur(0,0,255)
*Mem + SizeOf(Vertex)
Next i
;Couleur dessous
*Mem.Vertex = *Ptr + 4 * SizeOf(Vertex)
For i = 0 To 3
*Mem\co=MaCouleur(255,255,255)
*Mem + SizeOf(Vertex)
Next i
;Couleur devant
*Mem.Vertex = *Ptr + 8 * SizeOf(Vertex)
For i = 0 To 3
*Mem\co=MaCouleur(255,255,0)
*Mem + SizeOf(Vertex)
Next i
;Couleur derriere
*Mem.Vertex = *Ptr + 12 * SizeOf(Vertex)
For i = 0 To 3
*Mem\co=MaCouleur(255,128,0)
*Mem + SizeOf(Vertex)
Next i
;Couleur gauche
*Mem.Vertex = *Ptr + 16 * SizeOf(Vertex)
For i = 0 To 3
*Mem\co=MaCouleur(0,255,0)
*Mem + SizeOf(Vertex)
Next i
;Couleur droit
*Mem.Vertex = *Ptr + 20 * SizeOf(Vertex)
For i = 0 To 3
*Mem\co=MaCouleur(255,0,0)
*Mem + SizeOf(Vertex)
Next i
SetMeshData(No, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_Color | #PB_Mesh_UVCoordinate , *Ptr,24)
SetMeshData(No,#PB_Mesh_Face,?Triangles,12)
CreateEntity(No,MeshID(No),MaterialID(r))
ScaleEntity(No,Taille - 1,Taille - 1,Taille - 1)
EntityLocate(No, x * Taille , y * Taille , z * Taille)
No+1
Next r
;Fixe la position des repères
EntityLocate(1, 2 * Taille , 1 * Taille , 1 * Taille)
EntityLocate(2, 1 * Taille , 1 * Taille , 2 * Taille)
;-Camera
CreateCamera(0,0,0,100,100)
CameraBackColor(0,RGB(0,0,255))
AmbientColor(RGB(200,200,200))
CameraLocate(0,EntityX(Centre) + 250 ,EntityY(Centre)+ 250,EntityZ(Centre))
MoveCamera(0,0,40,350)
CameraLookAt(0,EntityX(Centre),EntityY(Centre),EntityZ(Centre))
Macro CosDeg(Angle)
Cos((Angle) * 0.0174533)
EndMacro
Macro SinDeg(Angle)
Sin((Angle) * 0.0174533)
EndMacro
Repeat
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_Right)
Repeat
Entity(0)\AngleZ + 1
AngleZ + 1
RotateEntity(0,Entity(0)\AngleX,Entity(0)\AngleY,Entity(0)\AngleZ) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<< Pas d'angle X
EntityLocate(0,50 - SinDeg(AngleZ-90)*Taille,50+CosDeg(AngleZ-90)*Taille,EntityZ(0))
RenderWorld()
FlipBuffers()
Until AngleZ >= 90
AngleZ = 0
ElseIf KeyboardReleased(#PB_Key_Up)
Repeat
Entity(0)\AngleY + 1
AngleY + 1
RotateEntity(0,Entity(0)\AngleX,Entity(0)\AngleY,Entity(0)\AngleZ) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<< Pas d'angle X
EntityLocate(0,EntityX(0),50+CosDeg(AngleY)*Taille,50+SinDeg(AngleY)*Taille)
RenderWorld()
FlipBuffers()
Until AngleY >= 90
AngleY=0
EndIf
EndIf
RenderWorld()
StartDrawing(ScreenOutput())
DrawText(0,0,"EntityAngleX(0) = " + StrF(EntityAngleX(0),2))
DrawText(0,20,"Entity(0)\AngleX = " + StrF(Entity(0)\AngleX,2))
DrawText(0,60,"pourquoi EntityAngleX(0) change , alors que je ne fais pas de rotation en X ? ")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
DataSection
Vertices:
;Dessus 0 à 3
Data.f -0.5,0.5,-0.5
Data.f 0,1,0
Data.l 0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 0,1,0
Data.l 0
Data.f 0,1
Data.f 0.5,0.5,0.5
Data.f 0,1,0
Data.l 0
Data.f 1,1
Data.f -0.5,0.5,0.5
Data.f 0,1,0
Data.l 0
Data.f 1,0
;Dessous 4 à 7
Data.f -0.5,-0.5,0.5
Data.f 0,-1,0
Data.l 0
Data.f 0,0
Data.f 0.5,-0.5,0.5
Data.f 0,-1,0
Data.l 0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 0,-1,0
Data.l 0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f 0,-1,0
Data.l 0
Data.f 1,0
;Devant 8 à 11
Data.f -0.5,0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 0,0
Data.f 0.5,0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 0,1
Data.f 0.5,-0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 1,1
Data.f -0.5,-0.5,0.5
Data.f 0,0,1
Data.l 0
Data.f 1,0
;Derrière 12 à 15
Data.f 0.5,0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 0,0
Data.f -0.5,0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 0,1
Data.f -0.5,-0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 1,1
Data.f 0.5,-0.5,-0.5
Data.f 0,0,-1
Data.l 0
Data.f 1,0
;Cote gauche 16 à 19
Data.f -0.5,0.5,-0.5
Data.f -1,0,0
Data.l 0
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f -1,0,0
Data.l 0
Data.f 0,1
Data.f -0.5,-0.5,0.5
Data.f -1,0,0
Data.l 0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f -1,0,0
Data.l 0
Data.f 1,0
;Cote droit 20 à 23
Data.f 0.5,0.5,0.5
Data.f 1,0,0
Data.l 0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 1,0,0
Data.l 0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 1,0,0
Data.l 0
Data.f 1,1
Data.f 0.5,-0.5,0.5
Data.f 1,0,0
Data.l 0
Data.f 1,0
Triangles:
;0 à 3
Data.w 2,1,0
Data.w 0,3,2
;4 à 7
Data.w 6,5,4
Data.w 4,7,6
;8 à 11
Data.w 10,9,8
Data.w 8,11,10
;12 à 15
Data.w 14,13,12
Data.w 12,15,14
;16 à 19
Data.w 18,17,16
Data.w 16,19,18
;20 à 23
Data.w 22,21,20
Data.w 20,23,22
EndDataSection