'u0,v0' pour les coordonnées de textures (on aura un 'u1-v1' en plus si deux canaux de textures, etc...)
En suite, il y a les faces. Chaque face est composé de trois vertex dont on fournis
a chaque fois les numero. De plus chaque face est affilié a une surface (égale aux
etc...
...
...
...
Code : Tout sélectionner
; Fichiers Include
IncludePath "Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"
Declare CreateCube()
Global anglex.F, angley.f, flagXDown
Global mox.f, omx.f, moy.f, omy.f, speed.f, mfar.f
Global *camera.CEntity
Global *ent.CEntity
Global *brush.CBrush
Global *texture.CTexture
Global *ent.CEntity
; Initialisation des différents modules
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
End
EndIf
; ouvre un ecran 3D
DM_Graphics3D(800, 600, 32, 0, 1)
; creation du cube
CreateCube()
;'--------------------------------------------------------------
;' UNE PETITE CAMERA POUR VOIR NOTRE SCENE
;'--------------------------------------------------------------
*camera = DM_CreateCamera(#Null)
DM_MoveEntity(*camera, 0,0,-100)
DM_CameraClsColor(*camera, 25, 25, 25)
Repeat
ExamineKeyboard()
ExamineMouse()
;' controle camera pour se balader
If KeyboardPushed(#PB_Key_Up) : DM_MoveEntity(*camera, 0,0,2) : EndIf
If KeyboardPushed(#PB_Key_Down) : DM_MoveEntity(*camera, 0,0,-2) : EndIf
If MouseButton(1)
If flagXdown=0
omx = MouseX();
omy = MouseY();
flagXDown=11
Else
moy = MouseY()-omy;
angley=(moy/5.0);
omy= MouseY()
mox = MouseX()-omx;
anglex=(mox/5.0);
omx= MouseX()
DM_TurnEntity(*camera, angley,anglex,0)
EndIf
EndIf
If MouseButton(1) = #False : flagXDown = 0 : EndIf
;'---------------
;' debut rendu
;'---------------
DM_BeginScene()
;' rendu scene
DM_Renderworld()
;' fin rendu
DM_EndScene()
Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
Procedure CreateCube()
*bb.CBrush
*texture.CTexture
; creation d'un mesh vide, un canal de texutre,
; 12 faces, 24 vertices, 1 surface, pas de parent
*ent = DM_CreateMesh(12, 24, 1, #Null)
; les vertex
Restore Vertex
For i= 0 To 23
Read x.f
Read y.f
Read z.f
Read u.f
Read v.f
; les coordonnées de vertex
DM_VertexCoords(*ent, i, x,y,z)
; les coordonnées de texture (canal 0)
DM_VertexTexCoords(*ent, i, 0, u, v)
Next i
; les triangles
Restore Indice
For i = 0 To 11
Read v1.l
Read v2.l
Read v3.l
DM_VertexTriangle(*ent, i, v1,v2,v3, 0)
Next i
;' on crée une petite Brush, dont on récupère le pointeur
*bb = DM_CreateBrush("cube")
; modifie certains paramètres de la brush
DM_BrushAmbient(*bb, 255,128,0,255)
DM_BrushDiffuse(*bb, 255,128,0,255)
; récupère le pointeur sur la première texture possible de la brush créée
*texture = DM_GetTexture(*bb, 0)
; charge une texture
DM_LoadTexture(*texture, "tex64.bmp")
; modifie l'état de rendu de la Brush pour voir de tous les cotés
DM_BrushAddRender(*bb, #D3DRS_CULLMODE, #D3DCULL_NONE)
; affecte la brush créee a notre entity
DM_PaintEntity(*ent, *bb, 0)
; génératon auto des normales de l'entity créée
DM_UpdateNormal(*ent)
; p'tite rotation
DM_RotateMesh(*ent, 45, 45, 0)
;'---------------------------------
EndProcedure
DataSection
Vertex:
; liste des 24 vertex avec eurs coordonnées de textures
Data.f -10,10,-10, 1,0, 10,10,-10, 1,1,-10,-10,-10, 0,0, 10,-10,-10,0,1 ,-10,10,10,0,0 , -10,-10,10, 0,1
Data.f 10,10,10,1,0 ,10,-10,10,1,1, -10,10,10, 0,0,10,10,10, 0,1, -10,10,-10, 1,0, 10,10,-10,1,1
Data.f -10,-10,10,1,0 , -10,-10,-10, 1,1, 10,-10,10,0,0 , 10,-10,-10,0,1, 10,10,-10,0,0 , 10,10,10, 0,1
Data.f 10,-10,-10,1,0 , 10,-10,10,1,1,-10,10,-10,1,0 , -10,-10,-10, 1,1,-10,10,10, 0,0 , -10,-10,10,0,1
Indice:
; liste des faces
Data.l 0,1,2,1,3,2,4,5,6,4,7,6,8,9,10,9,11,10,12,13,14
Data.l 13,15,14,16,17,18,17,19,18,20,21,22,21,23,22
EndDataSection