au niveau des mesh:
Tout d'abord il y a la liste des différent vertex:
'x-y-z' pour leur coordonnées
'nx-ny-nz' pour leurs normales
'color' pour leur couleur
'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
nombre de brush de l'objet) qui determine la brush qui lui sera appliqué
face0 = vertice n° 0-1-2 surface 0
face1 = vertice n° 3-4-5 surface 0
etc...
en mémoire cela donne:
vertex_0
vertex_1
vertex_2
...
vertex_n
face_0
face_1
face_2
...
face_n
brush_0(pour surface 0)
brush_1(pour surface 1)
...
brush_n(pour surface n)
Voici le code que tu avait commencé a écrire (un Cube donc)
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()
end
Procedure CreateCube()
        *bb.CBrush
        *texture.CTexture
        ; creation d'un mesh vide,
        ; 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 des 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
EndDataSectiongenre SetVertexBuffer), désolé, c'est un peu l'incovénient des Beta-test,
certaines chose change un petit peu de temps en temps
dernière version du modules:
http://www.dreamotion3d.com/PureBasic/modulePB.zip