Créer des mesh de solides platoniciens

Généralités sur la programmation 3D
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Créer des mesh de solides platoniciens

Message par kelebrindae »

Bonjour à tous,

Suite à la découverte d'un petit bug dans la gestion des ombres en PB (si vous faîtes un ScaleEntity, l'ombre de cette entité n'est plus correcte), je suis parvenu à la conclusion que pour contourner le problème, il faut créer le mesh directement à la bonne taille plutôt que de le retailler ensuite.

Comme ce n'est pas économique d'avoir plusieurs sets de meshDatas pour une même forme à des tailles différentes, voici un petit bout de code pour créer un mesh en choisissant sa taille "at runtime", ainsi que ses coordonnées UV.
Mais la forme du mesh est toujours "en dur", alors ça se limite au cube et aux autres solides platoniciens...

Code : Tout sélectionner

; Author: Kelebrindae (modification of the "cylinder 3D" demo, from Comtois)
; Date: march,13, 2006, last updated febr, 13, 2012
; PB version: v4.61, updated to 5.21
;- Controls: F1 to F7 to change visualization

Enumeration
  #tetrahedron
  #cube
  #octahedron
  #dodecahedron
  #icosahedron
EndEnumeration

;- Initialisation 
If MessageRequester("Platonic Solids","Full Screen ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes      
  FullScreen=#True
Else            
  FullScreen=#False
EndIf 

If InitEngine3D() = 0 
  MessageRequester( "Error" , "Can't initialize 3D, check if engine3D.dll is available" , 0 ) 
End 
ElseIf InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester( "Error" , "Can't find DirectX 7.0 or above" , 0 ) 
  End 
EndIf 

;- Open screen
If Fullscreen  
  OpenScreen(800,600,32,"Platonic Solids") 
Else 
  OpenWindow(0,0, 0, 800 , 600 ,"Platonic Solids",#PB_Window_ScreenCentered) 
  OpenWindowedScreen(WindowID(0),0,0, 800 , 600,0,0,0) 
EndIf 


EnableExplicit

;- ---- Procedures ----
;************************************************************************************
; Name: CreatePlatonicMesh
; Purpose: Create a platonic solid mesh, scaled and UV mapped dynamically
; Parameters:
;   - solide: #tetrahedron,#cube,#octahedron,#dodecahedron, or #icosahedron
;   - X size
;   - Y size
;   - Z size
;   - origin of mapping coord U 
;   - origin of mapping coord V
;   - Vertices color
; Return value: mesh number, or -1 if an error occurs
;************************************************************************************
Procedure.i CreatePlatonicMesh(solid.i,sizeX.f = 1,sizeY.f = 1,sizeZ.f = 1,Uorigin.f = 0,Vorigin.f = 0,Uscale.f = 1,Vscale.f = 1,color.i = $FFFFFF) 

  Protected nbVert.i , nbTri.i              ; Number of vertices and faces
  Protected x.f,y.f,z.f                     ; vertex position
  Protected nx.f,ny.f,nz.f                  ; vertex normals
  Protected u.f,v.f                         ; vertex UV coords (texture mapping)
  Protected newmesh.i                       ; Procedure Result
  Protected i.i,v1.i,v2.i,v3.i
  
  ; Restore the good set of meshdatas
  Select solid
    Case #tetrahedron
      Restore tetrahedron
    
    Case #cube
      Restore cube
    
    Case #octahedron
      Restore octahedron
    
    Case #dodecahedron
      Restore dodecahedron
      
    Case #icosahedron
      Restore icosahedron
    
    Default
      ProcedureReturn -1 
  EndSelect 

  ; Read number of vertices and triangles
  Read nbVert
  Read nbTri

  ; Read position, normals, uv coords, and add the vertex to the mesh
  newMesh = CreateMesh(#PB_Any)
  For i = 1 To nbVert
    Read.f x
    Read.f y
    Read.f z
    Read.f nx
    Read.f ny
    Read.f nz
    Read.f u
    Read.f v
    
    MeshVertexPosition(x * sizex,y * sizey,z * sizez)
    MeshVertexNormal(nx,ny,nz)
    MeshVertexColor(color)
    MeshVertexTextureCoordinate(uorigin + (u * uscale),vorigin + (v * vscale))
    
  Next i    
  
  ; Add the faces
  For i=1 To nbTri 
    Read.i v1
    Read.i v2
    Read.i v3 
    
    MeshFace(v1,v2,v3)
  Next i 
     
  ; Finalize as static mesh
  FinishMesh(#True)
  
  ProcedureReturn newMesh
EndProcedure    

DisableExplicit

;- ---- Main loop ----
;-Mesh 
; Change parameters 2 to 8 to test the effects on size and texturing
myTetraMesh.i = CreatePlatonicMesh(#tetrahedron,3,3,3)
myCubeMesh.i = CreatePlatonicMesh(#cube,3,3,3) 
myOctaMesh.i = CreatePlatonicMesh(#octahedron,3,3,3) 
myDodecaMesh.i = CreatePlatonicMesh(#dodecahedron,3,3,3) 
myIcosaMesh.i = CreatePlatonicMesh(#icosahedron,3,3,3) 


;-Entity 
CreateEntity(0,MeshID(myTetraMesh),#PB_Material_None) 
CreateEntity(1,MeshID(myCubeMesh),#PB_Material_None) 
CreateEntity(2,MeshID(myOctaMesh),#PB_Material_None) 
CreateEntity(3,MeshID(myDodecaMesh),#PB_Material_None) 
CreateEntity(4,MeshID(myIcosaMesh),#PB_Material_None) 

MoveEntity(0,5,5,0,#PB_Absolute)
MoveEntity(1,-5,5,0,#PB_Absolute)
MoveEntity(2,10,-5,0,#PB_Absolute)
MoveEntity(3,0,-5,0,#PB_Absolute)
MoveEntity(4,-10,-5,0,#PB_Absolute)

;-Camera 
CreateCamera(0, 0, 0 , 100 , 100) 
MoveCamera(0,0,0,-30,#PB_Absolute) 
CameraLookAt(0,0,0,0) 
viewlabel.s = "Platonic Solids"

;-Light 
AmbientColor(RGB(105,105,105)) 
CreateLight(0,RGB(160,160,255),200,300,0) 
CreateLight(1,RGB(255,127,0),-200,-200,200) 


pas.f = 0.8
angle.f = 0
Repeat 
   If fullscreen = 0 
      While WindowEvent() : Wend 
   EndIf
   
   ; Rotate solids, rotate! Oh, you're so gorgeous... ;)
   Angle + Pas 
   RotateEntity(0, angle,angle/2,-angle,#PB_Absolute) 
   RotateEntity(1, angle/2,-angle,angle,#PB_Absolute) 
   RotateEntity(2, -angle,angle,angle/2,#PB_Absolute) 
   RotateEntity(3, -angle,angle/2,angle,#PB_Absolute) 
   RotateEntity(4, angle,-angle/2,-angle,#PB_Absolute) 

   ; Manage camera views
   If ExamineKeyboard() 
     If KeyboardReleased(#PB_Key_F1) 
      MoveCamera(0,EntityX(0),EntityY(0),EntityZ(0) - 10,#PB_Absolute) 
      CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0)) 
      viewlabel = "Tetrahedron"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F2) 
      MoveCamera(0,EntityX(1),EntityY(1),EntityZ(1) - 10,#PB_Absolute) 
      CameraLookAt(0,EntityX(1),EntityY(1),EntityZ(1)) 
      viewlabel = "Cube"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F3) 
      MoveCamera(0,EntityX(2),EntityY(2),EntityZ(2) - 10,#PB_Absolute) 
      CameraLookAt(0,EntityX(2),EntityY(2),EntityZ(2)) 
      viewlabel = "Octahedron"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F4) 
      MoveCamera(0,EntityX(3),EntityY(3),EntityZ(3) - 10,#PB_Absolute) 
      CameraLookAt(0,EntityX(3),EntityY(3),EntityZ(3)) 
      viewlabel = "Dodecahedron"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F5) 
      MoveCamera(0,EntityX(4),EntityY(4),EntityZ(4) - 10,#PB_Absolute) 
      CameraLookAt(0,EntityX(4),EntityY(4),EntityZ(4)) 
      viewlabel = "Icosahedron"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F6) 
      MoveCamera(0,0,0,-30,#PB_Absolute) 
      CameraLookAt(0,0,0,0) 
      viewlabel = "Platonic Solids"
      ClearDebugOutput(): Debug viewlabel
     EndIf 
     If KeyboardReleased(#PB_Key_F7) 
       CameraMode=1-CameraMode 
       CameraRenderMode(0,CameraMode) 
       AmbientColor(RGB(105+cameramode*150,105+cameramode*150,105+cameramode*150)) 
     EndIf 
   EndIf 
  
  ; show it all
  RenderWorld() 
   
  ; Flip buffers to avoid tearing  
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) 

;- Solids datas
DataSection:
tetrahedron:
; Nb sommets / Nb faces
Data.i 10,4

; Vertices: pos / normals / uv
Data.f 0.817497,0.578350,0
Data.f 0,1,0
Data.f 0.5,0.5
Data.f -0.815497,0.578350,0
Data.f 0,1,0
Data.f 0.5,1.5
Data.f 0,-0.576350,0.817497
Data.f 0,0.577351,0.816496
Data.f -0.5,1
Data.f 0,-0.576350,-0.815497
Data.f 0,0.577351,-0.816496
Data.f -0.5,1
Data.f 0,-0.576350,-0.815497
Data.f 0.816496,-0.577351,0
Data.f -0.5,1.5
Data.f 0,-0.576350,0.817497
Data.f 0.816496,-0.577351,0
Data.f 0.5,1.5
Data.f 0.817497,0.578350,0
Data.f 0.816496,-0.577351,0
Data.f 0,0.5
Data.f 0,-0.576350,-0.815497
Data.f -0.816496,-0.577351,0
Data.f -0.5,1.5
Data.f -0.815497,0.578350,0
Data.f -0.816496,-0.577351,0
Data.f 0,0.5
Data.f 0,-0.576350,0.817497
Data.f -0.816496,-0.577351,0
Data.f 0.5,1.5

; Faces
Data.i 0,1,2
Data.i 1,0,3
Data.i 4,6,5
Data.i 7,9,8

cube:
; Nb sommets / Nb faces
Data.i 24,12

; Vertices: pos / normals / uv
Data.f -0.5,0.5,-0.5
Data.f 0,1,0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 0,1,0
Data.f 0,1
Data.f 0.5,0.5,0.5
Data.f 0,1,0
Data.f 1,1
Data.f -0.5,0.5,0.5
Data.f 0,1,0
Data.f 1,0
Data.f -0.5,-0.5,0.5
Data.f 0,-1,0
Data.f 0,0
Data.f 0.5,-0.5,0.5
Data.f 0,-1,0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 0,-1,0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f 0,-1,0
Data.f 1,0
Data.f -0.5,0.5,0.5
Data.f 0,0,1
Data.f 0,0
Data.f 0.5,0.5,0.5
Data.f 0,0,1
Data.f 0,1
Data.f 0.5,-0.5,0.5
Data.f 0,0,1
Data.f 1,1
Data.f -0.5,-0.5,0.5
Data.f 0,0,1
Data.f 1,0
Data.f 0.5,0.5,-0.5
Data.f 0,0,-1
Data.f 0,0
Data.f -0.5,0.5,-0.5
Data.f 0,0,-1
Data.f 0,1
Data.f -0.5,-0.5,-0.5
Data.f 0,0,-1
Data.f 1,1
Data.f 0.5,-0.5,-0.5
Data.f 0,0,-1
Data.f 1,0
Data.f -0.5,0.5,-0.5
Data.f -1,0,0
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f -1,0,0
Data.f 0,1
Data.f -0.5,-0.5,0.5
Data.f -1,0,0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f -1,0,0
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 1,0,0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 1,0,0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 1,0,0
Data.f 1,1
Data.f 0.5,-0.5,0.5
Data.f 1,0,0
Data.f 1,0

; Faces
Data.i 2,1,0
Data.i 0,3,2
Data.i 6,5,4
Data.i 4,7,6
Data.i 10,9,8
Data.i 8,11,10
Data.i 14,13,12
Data.i 12,15,14
Data.i 18,17,16
Data.i 16,19,18
Data.i 22,21,20
Data.i 20,23,22


octahedron:
; Nb sommets / Nb faces
Data.i 18,8

; Vertices: pos / normals / uv
Data.f 0,0.708107,0.708107
Data.f 0,1,0
Data.f 0,0.5
Data.f 0,0.708107,-0.706107
Data.f 0,1,0
Data.f 0,1.5
Data.f 1.001000,0,0
Data.f 1,0,0
Data.f 0.5,1
Data.f 0,-0.706107,0.708107
Data.f 0,0,1
Data.f -0.5,1
Data.f -0.999000,0,0
Data.f -1,0,0
Data.f 0,1.5
Data.f 0,-0.706107,-0.706107
Data.f 0,0,-1
Data.f -0.5,1
Data.f 1.001000,0,0
Data.f 0.577350,0,0.816496
Data.f 0,0.5
Data.f 0,0.708107,0.708107
Data.f 0.577350,0,0.816496
Data.f 0.5,1
Data.f 0,0.708107,0.708107
Data.f -0.577350,0,0.816496
Data.f 0.5,1
Data.f -0.999000,0,0
Data.f -0.577350,0.816496,0
Data.f -0.5,1
Data.f 0,0.708107,-0.706107
Data.f -0.577350,0,-0.816496
Data.f 0.5,1
Data.f 1.001000,0,0
Data.f 0.577350,0,-0.816496
Data.f 0,0.5
Data.f 0,0.708107,-0.706107
Data.f 0.577350,0,-0.816496
Data.f 0.5,1
Data.f 0,-0.706107,-0.706107
Data.f 0.577350,-0.816496,0
Data.f 0,1.5
Data.f 0,-0.706107,0.708107
Data.f 0.577350,-0.816496,0
Data.f 0,0.5
Data.f -0.999000,0,0
Data.f -0.577350,-0.816496,0
Data.f -0.5,1
Data.f 0,-0.706107,0.708107
Data.f -0.577350,-0.816496,0
Data.f 0,0.5
Data.f 0,-0.706107,-0.706107
Data.f -0.577350,-0.816496,0
Data.f 0,1.5

; Faces
Data.i 1,0,2
Data.i 6,7,3
Data.i 3,8,4
Data.i 9,0,1
Data.i 4,10,5
Data.i 5,12,11
Data.i 2,14,13
Data.i 15,17,16

dodecahedron:
; Nb sommets / Nb faces
Data.i 72,36

; Vertices: pos / normals / uv
Data.f 0.357822,0.935172,0
Data.f 0,0.955423,0.295242
Data.f 0.190983,1
Data.f -0.355822,0.935172,0
Data.f 0,0.955423,-0.295242
Data.f -0.190983,1
Data.f 0.578350,0.578350,0.578350
Data.f 0.688191,0.587785,0.425325
Data.f 0.309017,0.690983
Data.f 0,0.357822,0.935172
Data.f 0,0.850651,0.525731
Data.f 0,0.5
Data.f -0.576350,0.578350,0.578350
Data.f 0,0.850651,0.525731
Data.f -0.309017,0.690983
Data.f -0.576350,0.578350,-0.576350
Data.f 0,0.850651,-0.525731
Data.f -0.309017,1.309020
Data.f 0,0.357822,-0.933172
Data.f 0,0.850651,-0.525731
Data.f 0,1.5
Data.f 0.578350,0.578350,-0.576350
Data.f 0,0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.935172,0,0.357822
Data.f 1,0,0
Data.f 0.190983,1
Data.f 0.935172,0,-0.355822
Data.f 1,0,0
Data.f -0.190983,1
Data.f 0,-0.355822,-0.933172
Data.f 0,0,-1
Data.f -0.190983,1
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f -0.309017,0.690983
Data.f 0.578350,-0.576350,0.578350
Data.f 0.850651,-0.525731,0
Data.f 0.309017,1.309020
Data.f 0.357822,-0.933172,0
Data.f 0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.576350,-0.576350,-0.576350
Data.f -0.425325,-0.688191,-0.587785
Data.f -0.309017,1.309020
Data.f -0.355822,-0.933172,0
Data.f 0,-0.992447,0.122673
Data.f -0.190983,1
Data.f 0,-0.355822,0.935172
Data.f 0,-0.850651,0.525731
Data.f 0,0.5
Data.f -0.576350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f -0.309017,0.690983
Data.f -0.933172,0,-0.355822
Data.f -0.979432,-0.201774,0
Data.f -0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.992447,0.122673,0
Data.f 0.190983,1
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.357822,0.935172,0
Data.f 0.850651,0.525731,0
Data.f 0,0.5
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0,0.357822,-0.933172
Data.f 0.525731,0,-0.850651
Data.f 0.190983,1
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0.935172,0,-0.355822
Data.f 0.525731,0,-0.850651
Data.f 0,0.5
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0,-0.355822,-0.933172
Data.f 0,-0.850651,-0.525731
Data.f 0,1.5
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.357822,-0.933172,0
Data.f 0,-0.850651,-0.525731
Data.f 0.190983,1
Data.f 0.578350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f 0.309017,0.690983
Data.f 0.578350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f 0.309017,0.690983
Data.f 0.357822,-0.933172,0
Data.f 0,-0.850651,0.525731
Data.f 0.190983,1
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.576350,-0.576350,0.578350
Data.f -0.850651,-0.525731,0
Data.f 0.309017,1.309020
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f -0.576350,0.578350,0.578350
Data.f -0.525731,0,0.850651
Data.f 0.309017,1.309020
Data.f 0,0.357822,0.935172
Data.f -0.525731,0,0.850651
Data.f 0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f 0,0.357822,0.935172
Data.f -0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0,-0.355822,0.935172
Data.f -0.525731,0,0.850651
Data.f -0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f 0,-0.355822,0.935172
Data.f -0.525731,0,0.850651
Data.f -0.190983,1
Data.f -0.576350,-0.576350,0.578350
Data.f -0.525731,0,0.850651
Data.f -0.309017,1.309020
Data.f -0.576350,0.578350,-0.576350
Data.f -0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f -0.576350,0.578350,-0.576350
Data.f -0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f -0.355822,0.935172,0
Data.f -0.850651,0.525731,0
Data.f 0,0.5
Data.f -0.355822,0.935172,0
Data.f -0.850651,0.525731,0
Data.f 0,0.5
Data.f -0.576350,0.578350,0.578350
Data.f -0.850651,0.525731,0
Data.f 0.309017,0.690983
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f 0,0.357822,-0.933172
Data.f -0.525731,0,-0.850651
Data.f 0.190983,1
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f 0,0.357822,-0.933172
Data.f -0.525731,0,-0.850651
Data.f 0.190983,1
Data.f -0.576350,0.578350,-0.576350
Data.f -0.525731,0,-0.850651
Data.f 0.309017,1.309020
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.935172,0,0.357822
Data.f 0.525731,0,0.850651
Data.f 0,0.5
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.935172,0,0.357822
Data.f 0.525731,0,0.850651
Data.f 0,0.5
Data.f 0.578350,-0.576350,0.578350
Data.f 0.525731,0,0.850651
Data.f -0.309017,0.690983
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.578350,-0.576350,0.578350
Data.f 0.525731,0,0.850651
Data.f -0.309017,0.690983
Data.f 0,-0.355822,0.935172
Data.f 0.525731,0,0.850651
Data.f -0.190983,1

; Faces
Data.i 0,3,2
Data.i 0,4,3
Data.i 0,1,4
Data.i 1,6,5
Data.i 1,7,6
Data.i 1,0,7
Data.i 20,8,9
Data.i 21,2,8
Data.i 22,23,2
Data.i 24,10,25
Data.i 26,11,10
Data.i 27,28,11
Data.i 29,12,13
Data.i 30,8,12
Data.i 31,9,8
Data.i 32,14,33
Data.i 34,15,14
Data.i 35,36,15
Data.i 15,16,17
Data.i 15,37,16
Data.i 15,39,38
Data.i 40,18,14
Data.i 41,19,18
Data.i 42,43,19
Data.i 44,46,45
Data.i 47,49,48
Data.i 50,52,51
Data.i 19,53,18
Data.i 19,55,54
Data.i 19,57,56
Data.i 58,10,14
Data.i 59,60,10
Data.i 61,63,62
Data.i 64,65,2
Data.i 66,68,67
Data.i 69,71,70

icosahedron:
; Nb sommets / Nb faces
Data.i 42,20

; Vertices: pos / normals / uv
Data.f 0,0.851651,0.526731
Data.f 0,1,0
Data.f 0,0.690983
Data.f 0,0.851651,-0.524731
Data.f 0,1,0
Data.f 0,1.309020
Data.f 0.851651,0.526731,0
Data.f 0.356822,0.934172,0
Data.f 0.5,1
Data.f 0.526731,0,0.851651
Data.f 0.810146,0,0.586227
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f 0,0,1
Data.f 0,1.309020
Data.f -0.849651,0.526731,0
Data.f -0.934172,0.356822,0
Data.f 0,0.690983
Data.f -0.524731,0,-0.849651
Data.f -0.810146,0,-0.586227
Data.f -0.5,1
Data.f 0.526731,0,-0.849651
Data.f 0,0,-1
Data.f 0,0.690983
Data.f 0.851651,-0.524731,0
Data.f 0.934172,-0.356822,0
Data.f 0,1.309020
Data.f 0,-0.849651,-0.524731
Data.f 0,-0.356822,-0.934172
Data.f -0.5,1
Data.f 0,-0.849651,0.526731
Data.f 0,-0.707107,0.707107
Data.f 0.309017,1.5
Data.f -0.849651,-0.524731,0
Data.f -0.934172,-0.356822,0
Data.f 0,1.309020
Data.f 0.851651,0.526731,0
Data.f 0.577350,0.577350,0.577350
Data.f 0,0.690983
Data.f 0,0.851651,0.526731
Data.f 0.577350,0.577350,0.577350
Data.f 0.309017,0.5
Data.f 0.526731,0,0.851651
Data.f 0,0.356822,0.934172
Data.f 0,0.690983
Data.f 0,0.851651,0.526731
Data.f 0,0.356822,0.934172
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f -0.577350,0.577350,0.577350
Data.f 0.5,1
Data.f 0,0.851651,0.526731
Data.f -0.577350,0.577350,0.577350
Data.f 0.309017,0.5
Data.f -0.849651,0.526731,0
Data.f -0.356822,0.934172,0
Data.f -0.5,1
Data.f 0,0.851651,-0.524731
Data.f -0.577350,0.577350,-0.577350
Data.f -0.309017,0.5
Data.f -0.524731,0,-0.849651
Data.f 0,0.356822,-0.934172
Data.f 0,1.309020
Data.f 0,0.851651,-0.524731
Data.f 0,0.356822,-0.934172
Data.f 0.5,1
Data.f 0.526731,0,-0.849651
Data.f 0.577350,0.577350,-0.577350
Data.f -0.5,1
Data.f 0.851651,0.526731,0
Data.f 0.577350,0.577350,-0.577350
Data.f 0,0.690983
Data.f 0,0.851651,-0.524731
Data.f 0.577350,0.577350,-0.577350
Data.f -0.309017,0.5
Data.f 0.851651,0.526731,0
Data.f 0.934172,0,0.356822
Data.f 0,0.690983
Data.f 0.851651,0.526731,0
Data.f 0.934172,0,-0.356822
Data.f 0,0.690983
Data.f 0.526731,0,-0.849651
Data.f 0.934172,0,-0.356822
Data.f -0.5,1
Data.f -0.524731,0,-0.849651
Data.f 0,-0.356822,-0.934172
Data.f 0,1.309020
Data.f 0,-0.849651,-0.524731
Data.f 0.577350,-0.577350,-0.577350
Data.f -0.309017,1.5
Data.f 0.526731,0,-0.849651
Data.f 0.577350,-0.577350,-0.577350
Data.f -0.5,1
Data.f 0.851651,-0.524731,0
Data.f 0.356822,-0.934172,0
Data.f 0.5,1
Data.f 0,-0.849651,-0.524731
Data.f 0.356822,-0.934172,0
Data.f 0,1.309020
Data.f 0,-0.849651,0.526731
Data.f 0.356822,-0.934172,0
Data.f 0,0.690983
Data.f 0,-0.849651,-0.524731
Data.f -0.577350,-0.577350,-0.577350
Data.f -0.309017,1.5
Data.f -0.849651,-0.524731,0
Data.f -0.356822,-0.934172,0
Data.f -0.5,1
Data.f 0,-0.849651,0.526731
Data.f -0.356822,-0.934172,0
Data.f 0,0.690983
Data.f 0,-0.849651,-0.524731
Data.f -0.356822,-0.934172,0
Data.f 0,1.309020
Data.f 0,-0.849651,0.526731
Data.f 0,-0.356822,0.934172
Data.f -0.5,1
Data.f 0.526731,0,0.851651
Data.f 0,-0.356822,0.934172
Data.f 0,0.690983
Data.f -0.524731,0,0.851651
Data.f -0.577350,-0.577350,0.577350
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f -0.934172,0,0.356822
Data.f 0.5,1

; Faces
Data.i 1,0,2
Data.i 12,13,3
Data.i 14,15,4
Data.i 16,17,5
Data.i 18,0,1
Data.i 5,19,6
Data.i 20,21,7
Data.i 22,24,23
Data.i 25,3,8
Data.i 26,8,27
Data.i 28,7,9
Data.i 29,30,8
Data.i 8,3,10
Data.i 31,33,32
Data.i 6,34,11
Data.i 35,37,36
Data.i 38,39,4
Data.i 10,40,11
Data.i 6,11,5
Data.i 5,11,41

EndDataSection
Je sais, ce n'est pas très utile.
Mais bon, on a bien le droit de s'amuser, aussi... :roll:

[EDIT]
Correction apportée au "FreeMemory" grâce à Tmyke (cf. plus bas)

[EDIT]
Updaté pour PB4.61

[EDIT]
Updaté pour PB5.21
Dernière modification par kelebrindae le jeu. 13/févr./2014 10:50, modifié 5 fois.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Code : Tout sélectionner

160    FreeMemory(vertexBuffer)
On me dit que ce qui est passé est égal à o, et que çà lui plaît pas :D
Donc çà marche pas pour moi :oops:
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

Ah bon ?!
Je viens de réessayer en faisant le copier-coller du code ci-dessus dans une page blanche de PB, et chez moi ça tourne sans problème... :?

En quelle version de PB es-tu ?
Quel OS utilises-tu (XP, Vista, Mac, Linux...) ?
Anonyme

Message par Anonyme »

Ca marche impec. :D
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

XP PB 4.02
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

Et toi, Cpl.Bator, en quelle version de PB es-tu ?

Y'en a d'autres chez qui ça plante ?
Si oui, pouvez-vous me donner vos specs (version de PB, OS, etc.) que j'essaie de trouver un facteur commun ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Frenchy Pilou a écrit :

Code : Tout sélectionner

160    FreeMemory(vertexBuffer)
On me dit que ce qui est passé est égal à o, et que çà lui plaît pas :D
Donc çà marche pas pour moi :oops:
Meme soucis que toi Frenchy Pilou, je regarde ton code kelebrindae pour voir si je trouve la faille
mémoire...

Config: XP + PB V4.10
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

J'ai trouvé, oubli souvent classique, il faut ecrire:

Code : Tout sélectionner

    FreeMemory(*vertexBuffer)
    FreeMemory(*facetriBuffer)
et non pas

Code : Tout sélectionner

    FreeMemory(vertexBuffer)
    FreeMemory(facetriBuffer)
et la ça marche très bien, code bien sympa d'ailleurs
;)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

Oooooooh....
Merci Tmyke, je me plante toujours avec les pointeurs. :oops:
Je fais la modif' dans le code ci-dessus tout de suite!
code bien sympa d'ailleurs
Merci, ça fait toujours plaisir! (même la plus grande partie est de Comtois; rendons à César etc., etc. :wink: )
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Maintenant çà marche :D
Il y a des petit soucis avec le F7!
Certaines arêtes deviennent invisibles sur les bords, ce qui rend le volume non reconnaissable :) (normal noir sur fond noir = noir :lol:
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

@Frenchy Pilou:
Ouaip, j'avais remarqué, mais j'ai un peu la flemme de trouver un contournement au problème. D'autant que les volumes sont plus facilement appréhendables avec la texture qu'en wireframe... :roll:

Et puis je suis parti sur autre chose (cf. post suivant)...
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

Voici une autre version qui fait à peu près la même chose, mais avec DreamMotion 3D.

Je dois dire que DreamMotion facilite la création dynamique du mesh, la manipulation des textures, et donne accès à plein de choses impossibles avec PB standard (presque trop: certains paramétrages sont un peu pointus pour le blaireau de base que je suis; mais comme ils ne sont pas obligatoires, ce n'est pas très grave).

Impressionnant, TMyke, très impressionnant ! :D

Code : Tout sélectionner

; Author: Kelebrindae (modification of the "cylinder 3D" demo, from Comtois)
; Date: march,13, 2006
; PB version: v4.00 + DreamMotion3D 4.0.4
; OS: Windows XP
; Demo: Yes

IncludePath "Include\"  :  IncludeFile "dreamotion3d.pbi"


; Globales
Global	*font.CFont
Global	*camera.CEntity
Global	Dim *mesh.CEntity(5)
Global *light1.CLight,*light2.CLight

;- Initialisation 
Resultat = MessageRequester("Platonic Solids","Full Screen ?",#PB_MessageRequester_YesNo) 
If Resultat = 6      
  FullScreen=1 
Else            
  FullScreen=0 
EndIf 

If InitSprite() = 0 Or InitKeyboard() = 0 
   MessageRequester( "Error" , "Can't find DirectX 7.0 or above" , 0 ) 
   End 
EndIf 

; init Dreammotion 3D screen
DM_Graphics3D(800, 600, 32,  FullScreen, 1)

; load font
*font = DM_LoadFont( "Tahoma",9 , 0)
DM_TextColor(*font, 255,255,0,255)


;- Data structures and definitions
Enumeration
  #tetrahedron
  #cube
  #octahedron
  #dodecahedron
  #icosahedron
EndEnumeration

;- ---- Procedures ----
;************************************************************************************
; Name: CreatePlatonicMesh
; Purpose: Create a platonic solid mesh, scaled and UV mapped dynamically
; Parameters:
;   - solide: #tetrahedron,#cube,#octahedron,#dodecahedron, or #icosahedron
;   - X size
;   - Y size
;   - Z size
;   - origin of mapping coord U 
;   - origin of mapping coord V
;   - Vertices color
; Return value: mesh number, or -1 if an error occurs
;************************************************************************************
Procedure CreatePlatonicMesh(*meshptr,solid.l,sizeX.f,sizeY.f,sizeZ.f,Uorigin.f,Vorigin.f,Uscale.f,Vscale.f,color.l) 

  Protected nbVert.l , nbTri.l              ; Number of vertices and faces
  Protected x.f,y.f,z.f                     ; vertex position
  Protected nx.f,ny.f,nz.f                  ; vertex normals
  Protected u.f,v.f                         ; vertex UV coords (texture mapping) 
  Protected numvert.l,numtri.l              ; Index of newly created vertex/triangle
  
  ; Restore the good set of meshdatas
  Select solid
    Case #tetrahedron
      Restore tetrahedron
    
    Case #cube
      Restore cube
    
    Case #octahedron
      Restore octahedron
    
    Case #dodecahedron
      Restore dodecahedron
      
    Case #icosahedron
      Restore icosahedron
    
    Default
      ProcedureReturn -1 
  EndSelect 

  ;*meshptr = DM_createMesh()

  ; Read number of vertices and triangles
  Read nbVert
  Read nbTri
  
  ; Read vertices position, normals, uv coords, and add them in the mesh
  For i = 1 To nbVert
    Read x
    Read y
    Read z
    Read nx
    Read ny
    Read nz
    Read u
    Read v
    
    numvert = DM_AddVertex (*meshptr,x * sizex,y * sizey,z * sizez,uorigin + (u * uscale),vorigin + (v * vscale))
    DM_VertexNormal (*meshptr,numvert,nx,ny,nz)
    DM_VertexColor (*meshptr,numvert,Red(color),Green(color),Blue(color),255)

  Next i    
  
  ;Read faces infos and add them to the mesh
  For i=1 To nbTri 
    Read v1
    Read v2
    Read v3 
    numtri = DM_AddTriangle(*meshptr,v1,v2,v3,0)
  Next i 
    
EndProcedure    


;- ---- Main loop ----

;-Camera 
*camera = DM_CreateCamera()
DM_TranslateEntity(*camera, 0,0,-30)
DM_CameraClsColor(*camera, 0, 0, 0)
viewlabel.s = "Platonic Solids"

;-Texture 
DM_TextureMipLevel( 1 ); for a better result

; Create a funny texture
*texture = DM_CreateTexture (128,128) 
DM_SetBuffer(*texture) ; indicates that you will draw on the texture, not on the screen
DM_SetColor(0,0,0,255)
DM_SetWidth(2)
DM_BeginScene()
DM_ClsScreen(255,255,255)
DM_DrawOval(50,40,5,10)
DM_DrawOval(78,40,5,10)
DM_SetWidth(4)
DM_DrawLine(50,90,78,90)
DM_DrawLine(50,90,30,80)
DM_DrawLine(78,90,98,80)
DM_DrawLine(30,80,25,70)
DM_DrawLine(98,80,103,70)
DM_EndScene()
DM_SetBuffer(0) ; switch back to screen render

;-Mesh 
; Meshes are created here, then "filled up" with data in the "CreatePlatonicMesh" procedure
*mesh(0)=DM_CreateMesh()
*mesh(1)=DM_createMesh()
*mesh(2)=DM_createMesh()
*mesh(3)=DM_createMesh()
*mesh(4)=DM_createMesh()

; Change parameters 3 to 9 to test the effects on size and texturing
CreatePlatonicMesh(*mesh(0),#tetrahedron,3,3,3,0.5,0.5,2,1,RGB(255,128,0))
CreatePlatonicMesh(*mesh(1),#cube,3,3,3,0,0,1,1,RGB(255,128,0))
CreatePlatonicMesh(*mesh(2),#octahedron,3,3,3,0.5,0,2,2,RGB(255,128,0))
CreatePlatonicMesh(*mesh(3),#dodecahedron,3,3,3,0.5,0,2,2,RGB(255,128,0))
CreatePlatonicMesh(*mesh(4),#icosahedron,3,3,3,0,0.5,3,2,RGB(255,128,0))

; Texture entities with the pre-created texture
DM_EntityTexture(*mesh(0),*texture,0)
DM_EntityTexture(*mesh(1),*texture,0)
DM_EntityTexture(*mesh(2),*texture,0)
DM_EntityTexture(*mesh(3),*texture,0)
DM_EntityTexture(*mesh(4),*texture,0)

; Position entities
DM_positionEntity(*mesh(0),-5,5,0,0)
DM_positionEntity(*mesh(1),5,5,0,0)
DM_positionEntity(*mesh(2),10,-5,0,0)
DM_positionEntity(*mesh(3),0,-5,0,0)
DM_positionEntity(*mesh(4),-10,-5,0,0)

;-Lights
DM_AmbientLight (105,105,105) 
*light1 = DM_CreateLight (#D3DLIGHT_POINT,0)
DM_LightRange(*light1,1500.0)
DM_LightColor(*light1,255,255,255,255)
DM_positionEntity(*light1,200,300,0)
*light2 = DM_CreateLight (#D3DLIGHT_POINT,1)
DM_LightRange(*light2,1500.0)
DM_LightColor(*light2,255,127,0,255)
DM_positionEntity(*light2,-200,-200,200)

pas.f = 0.8
angle.f = 0
Repeat 
   If fullscreen = 0 
      While WindowEvent() : Wend 
   EndIf
   
   ; Rotate solids, rotate! Oh, you're so gorgeous... ;)
   Angle + Pas 
   DM_rotateEntity(*mesh(0), angle,angle/2,-angle) 
   DM_rotateEntity(*mesh(1), angle/2,-angle,angle) 
   DM_rotateEntity(*mesh(2), -angle,angle,angle/2) 
   DM_rotateEntity(*mesh(3), -angle,angle/2,angle) 
   DM_rotateEntity(*mesh(4), angle,-angle/2,-angle) 

   ; Manage camera views
   If ExamineKeyboard() 
     If KeyboardReleased(#PB_Key_F1) 
      DM_PositionEntity( *camera,DM_EntityX(*mesh(0)),DM_EntityY(*mesh(0)),DM_EntityZ(*mesh(0)) - 10) 
      DM_PointEntity( *camera,*mesh(0),0) 
      viewlabel = "Tetrahedron"
     EndIf 
     If KeyboardReleased(#PB_Key_F2) 
      DM_PositionEntity( *camera,DM_EntityX(*mesh(1)),DM_EntityY(*mesh(1)),DM_EntityZ(*mesh(1)) - 10) 
      DM_PointEntity( *camera,*mesh(1),0) 
      viewlabel = "Cube"
     EndIf 
     If KeyboardReleased(#PB_Key_F3) 
      DM_PositionEntity( *camera,DM_EntityX(*mesh(2)),DM_EntityY(*mesh(2)),DM_EntityZ(*mesh(2)) - 10) 
      DM_PointEntity( *camera,*mesh(2),0) 
      viewlabel = "Octahedron"
     EndIf 
     If KeyboardReleased(#PB_Key_F4) 
      DM_PositionEntity( *camera,DM_EntityX(*mesh(3)),DM_EntityY(*mesh(3)),DM_EntityZ(*mesh(3)) - 10) 
      DM_PointEntity( *camera,*mesh(3),0) 
      viewlabel = "Dodecahedron"
     EndIf 
     If KeyboardReleased(#PB_Key_F5) 
      DM_PositionEntity( *camera,DM_EntityX(*mesh(4)),DM_EntityY(*mesh(4)),DM_EntityZ(*mesh(4)) - 10) 
      DM_PointEntity( *camera,*mesh(4),0) 
      viewlabel = "Icosahedron"
     EndIf 
     If KeyboardReleased(#PB_Key_F6) 
      DM_PositionEntity( *camera,0,0,-30) 
      viewlabel = "Platonic Solids"
     EndIf 
     
     ; Modify texture on-the-fly: fantastic to make HUDs, 
     If KeyboardReleased(#PB_Key_F7)
       DM_SetBuffer(*texture)
       DM_BeginScene()
       DM_SetColor(255,0,0,255)
       DM_DrawLine(Random(40),Random(127),127 - Random(40),Random(127))
       DM_EndScene()
       DM_SetBuffer(0)
     EndIf 
     
   EndIf 
   
  ; show it all
   DM_BeginScene()
     DM_RenderWorld(*camera)
   
     ; A little help
     DM_DrawText(*font, 0,0,"[F1] -> [F6] to change camera view, [F7] to dynamically alter the texture (which is cool!)")
     DM_DrawText(*font, 0,18,"Camera: " + viewlabel)
   DM_EndScene()

Until KeyboardPushed(#PB_Key_Escape) 
DM_ClearGraphics()

DataSection:
tetrahedron:
; Nb sommets / Nb faces
Data.l 10,4

; Vertices: pos / normals / uv
Data.f 0.817497,0.578350,0
Data.f 0,1,0
Data.f 0.5,0.5
Data.f -0.815497,0.578350,0
Data.f 0,1,0
Data.f 0.5,1.5
Data.f 0,-0.576350,0.817497
Data.f 0,0.577351,0.816496
Data.f -0.5,1
Data.f 0,-0.576350,-0.815497
Data.f 0,0.577351,-0.816496
Data.f -0.5,1
Data.f 0,-0.576350,-0.815497
Data.f 0.816496,-0.577351,0
Data.f -0.5,1.5
Data.f 0,-0.576350,0.817497
Data.f 0.816496,-0.577351,0
Data.f 0.5,1.5
Data.f 0.817497,0.578350,0
Data.f 0.816496,-0.577351,0
Data.f 0,0.5
Data.f 0,-0.576350,-0.815497
Data.f -0.816496,-0.577351,0
Data.f -0.5,1.5
Data.f -0.815497,0.578350,0
Data.f -0.816496,-0.577351,0
Data.f 0,0.5
Data.f 0,-0.576350,0.817497
Data.f -0.816496,-0.577351,0
Data.f 0.5,1.5

; Faces
Data.l 0,1,2
Data.l 1,0,3
Data.l 4,6,5
Data.l 7,9,8

cube:
; Nb sommets / Nb faces
Data.l 24,12

; Vertices: pos / normals / uv
Data.f -0.5,0.5,-0.5
Data.f 0,1,0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 0,1,0
Data.f 0,1
Data.f 0.5,0.5,0.5
Data.f 0,1,0
Data.f 1,1
Data.f -0.5,0.5,0.5
Data.f 0,1,0
Data.f 1,0
Data.f -0.5,-0.5,0.5
Data.f 0,-1,0
Data.f 0,0
Data.f 0.5,-0.5,0.5
Data.f 0,-1,0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 0,-1,0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f 0,-1,0
Data.f 1,0
Data.f -0.5,0.5,0.5
Data.f 0,0,1
Data.f 0,0
Data.f 0.5,0.5,0.5
Data.f 0,0,1
Data.f 0,1
Data.f 0.5,-0.5,0.5
Data.f 0,0,1
Data.f 1,1
Data.f -0.5,-0.5,0.5
Data.f 0,0,1
Data.f 1,0
Data.f 0.5,0.5,-0.5
Data.f 0,0,-1
Data.f 0,0
Data.f -0.5,0.5,-0.5
Data.f 0,0,-1
Data.f 0,1
Data.f -0.5,-0.5,-0.5
Data.f 0,0,-1
Data.f 1,1
Data.f 0.5,-0.5,-0.5
Data.f 0,0,-1
Data.f 1,0
Data.f -0.5,0.5,-0.5
Data.f -1,0,0
Data.f 0,0
Data.f -0.5,0.5,0.5
Data.f -1,0,0
Data.f 0,1
Data.f -0.5,-0.5,0.5
Data.f -1,0,0
Data.f 1,1
Data.f -0.5,-0.5,-0.5
Data.f -1,0,0
Data.f 1,0
Data.f 0.5,0.5,0.5
Data.f 1,0,0
Data.f 0,0
Data.f 0.5,0.5,-0.5
Data.f 1,0,0
Data.f 0,1
Data.f 0.5,-0.5,-0.5
Data.f 1,0,0
Data.f 1,1
Data.f 0.5,-0.5,0.5
Data.f 1,0,0
Data.f 1,0

; Faces
Data.l 2,1,0
Data.l 0,3,2
Data.l 6,5,4
Data.l 4,7,6
Data.l 10,9,8
Data.l 8,11,10
Data.l 14,13,12
Data.l 12,15,14
Data.l 18,17,16
Data.l 16,19,18
Data.l 22,21,20
Data.l 20,23,22


octahedron:
; Nb sommets / Nb faces
Data.l 18,8

; Vertices: pos / normals / uv
Data.f 0,0.708107,0.708107
Data.f 0,1,0
Data.f 0,0.5
Data.f 0,0.708107,-0.706107
Data.f 0,1,0
Data.f 0,1.5
Data.f 1.001000,0,0
Data.f 1,0,0
Data.f 0.5,1
Data.f 0,-0.706107,0.708107
Data.f 0,0,1
Data.f -0.5,1
Data.f -0.999000,0,0
Data.f -1,0,0
Data.f 0,1.5
Data.f 0,-0.706107,-0.706107
Data.f 0,0,-1
Data.f -0.5,1
Data.f 1.001000,0,0
Data.f 0.577350,0,0.816496
Data.f 0,0.5
Data.f 0,0.708107,0.708107
Data.f 0.577350,0,0.816496
Data.f 0.5,1
Data.f 0,0.708107,0.708107
Data.f -0.577350,0,0.816496
Data.f 0.5,1
Data.f -0.999000,0,0
Data.f -0.577350,0.816496,0
Data.f -0.5,1
Data.f 0,0.708107,-0.706107
Data.f -0.577350,0,-0.816496
Data.f 0.5,1
Data.f 1.001000,0,0
Data.f 0.577350,0,-0.816496
Data.f 0,0.5
Data.f 0,0.708107,-0.706107
Data.f 0.577350,0,-0.816496
Data.f 0.5,1
Data.f 0,-0.706107,-0.706107
Data.f 0.577350,-0.816496,0
Data.f 0,1.5
Data.f 0,-0.706107,0.708107
Data.f 0.577350,-0.816496,0
Data.f 0,0.5
Data.f -0.999000,0,0
Data.f -0.577350,-0.816496,0
Data.f -0.5,1
Data.f 0,-0.706107,0.708107
Data.f -0.577350,-0.816496,0
Data.f 0,0.5
Data.f 0,-0.706107,-0.706107
Data.f -0.577350,-0.816496,0
Data.f 0,1.5

; Faces
Data.l 1,0,2
Data.l 6,7,3
Data.l 3,8,4
Data.l 9,0,1
Data.l 4,10,5
Data.l 5,12,11
Data.l 2,14,13
Data.l 15,17,16

dodecahedron:
; Nb sommets / Nb faces
Data.l 72,36

; Vertices: pos / normals / uv
Data.f 0.357822,0.935172,0
Data.f 0,0.955423,0.295242
Data.f 0.190983,1
Data.f -0.355822,0.935172,0
Data.f 0,0.955423,-0.295242
Data.f -0.190983,1
Data.f 0.578350,0.578350,0.578350
Data.f 0.688191,0.587785,0.425325
Data.f 0.309017,0.690983
Data.f 0,0.357822,0.935172
Data.f 0,0.850651,0.525731
Data.f 0,0.5
Data.f -0.576350,0.578350,0.578350
Data.f 0,0.850651,0.525731
Data.f -0.309017,0.690983
Data.f -0.576350,0.578350,-0.576350
Data.f 0,0.850651,-0.525731
Data.f -0.309017,1.309020
Data.f 0,0.357822,-0.933172
Data.f 0,0.850651,-0.525731
Data.f 0,1.5
Data.f 0.578350,0.578350,-0.576350
Data.f 0,0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.935172,0,0.357822
Data.f 1,0,0
Data.f 0.190983,1
Data.f 0.935172,0,-0.355822
Data.f 1,0,0
Data.f -0.190983,1
Data.f 0,-0.355822,-0.933172
Data.f 0,0,-1
Data.f -0.190983,1
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f -0.309017,0.690983
Data.f 0.578350,-0.576350,0.578350
Data.f 0.850651,-0.525731,0
Data.f 0.309017,1.309020
Data.f 0.357822,-0.933172,0
Data.f 0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.576350,-0.576350,-0.576350
Data.f -0.425325,-0.688191,-0.587785
Data.f -0.309017,1.309020
Data.f -0.355822,-0.933172,0
Data.f 0,-0.992447,0.122673
Data.f -0.190983,1
Data.f 0,-0.355822,0.935172
Data.f 0,-0.850651,0.525731
Data.f 0,0.5
Data.f -0.576350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f -0.309017,0.690983
Data.f -0.933172,0,-0.355822
Data.f -0.979432,-0.201774,0
Data.f -0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.992447,0.122673,0
Data.f 0.190983,1
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f 0.357822,0.935172,0
Data.f 0.850651,0.525731,0
Data.f 0,0.5
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0,0.357822,-0.933172
Data.f 0.525731,0,-0.850651
Data.f 0.190983,1
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0.578350,0.578350,-0.576350
Data.f 0.525731,0,-0.850651
Data.f 0.309017,0.690983
Data.f 0.935172,0,-0.355822
Data.f 0.525731,0,-0.850651
Data.f 0,0.5
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0.850651,-0.525731,0
Data.f -0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0,-0.355822,-0.933172
Data.f 0,-0.850651,-0.525731
Data.f 0,1.5
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.578350,-0.576350,-0.576350
Data.f 0,-0.850651,-0.525731
Data.f 0.309017,1.309020
Data.f 0.357822,-0.933172,0
Data.f 0,-0.850651,-0.525731
Data.f 0.190983,1
Data.f 0.578350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f 0.309017,0.690983
Data.f 0.578350,-0.576350,0.578350
Data.f 0,-0.850651,0.525731
Data.f 0.309017,0.690983
Data.f 0.357822,-0.933172,0
Data.f 0,-0.850651,0.525731
Data.f 0.190983,1
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.355822,-0.933172,0
Data.f -0.850651,-0.525731,0
Data.f 0,1.5
Data.f -0.576350,-0.576350,0.578350
Data.f -0.850651,-0.525731,0
Data.f 0.309017,1.309020
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f -0.576350,0.578350,0.578350
Data.f -0.525731,0,0.850651
Data.f 0.309017,1.309020
Data.f 0,0.357822,0.935172
Data.f -0.525731,0,0.850651
Data.f 0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f 0,0.357822,0.935172
Data.f -0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0,-0.355822,0.935172
Data.f -0.525731,0,0.850651
Data.f -0.190983,1
Data.f -0.933172,0,0.357822
Data.f -0.525731,0,0.850651
Data.f 0,1.5
Data.f 0,-0.355822,0.935172
Data.f -0.525731,0,0.850651
Data.f -0.190983,1
Data.f -0.576350,-0.576350,0.578350
Data.f -0.525731,0,0.850651
Data.f -0.309017,1.309020
Data.f -0.576350,0.578350,-0.576350
Data.f -0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f -0.576350,0.578350,-0.576350
Data.f -0.850651,0.525731,0
Data.f -0.309017,0.690983
Data.f -0.355822,0.935172,0
Data.f -0.850651,0.525731,0
Data.f 0,0.5
Data.f -0.355822,0.935172,0
Data.f -0.850651,0.525731,0
Data.f 0,0.5
Data.f -0.576350,0.578350,0.578350
Data.f -0.850651,0.525731,0
Data.f 0.309017,0.690983
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f 0,0.357822,-0.933172
Data.f -0.525731,0,-0.850651
Data.f 0.190983,1
Data.f -0.933172,0,-0.355822
Data.f -0.525731,0,-0.850651
Data.f 0,1.5
Data.f 0,0.357822,-0.933172
Data.f -0.525731,0,-0.850651
Data.f 0.190983,1
Data.f -0.576350,0.578350,-0.576350
Data.f -0.525731,0,-0.850651
Data.f 0.309017,1.309020
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.935172,0,0.357822
Data.f 0.525731,0,0.850651
Data.f 0,0.5
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.935172,0,0.357822
Data.f 0.525731,0,0.850651
Data.f 0,0.5
Data.f 0.578350,-0.576350,0.578350
Data.f 0.525731,0,0.850651
Data.f -0.309017,0.690983
Data.f 0,0.357822,0.935172
Data.f 0.525731,0,0.850651
Data.f 0.190983,1
Data.f 0.578350,-0.576350,0.578350
Data.f 0.525731,0,0.850651
Data.f -0.309017,0.690983
Data.f 0,-0.355822,0.935172
Data.f 0.525731,0,0.850651
Data.f -0.190983,1

; Faces
Data.l 0,3,2
Data.l 0,4,3
Data.l 0,1,4
Data.l 1,6,5
Data.l 1,7,6
Data.l 1,0,7
Data.l 20,8,9
Data.l 21,2,8
Data.l 22,23,2
Data.l 24,10,25
Data.l 26,11,10
Data.l 27,28,11
Data.l 29,12,13
Data.l 30,8,12
Data.l 31,9,8
Data.l 32,14,33
Data.l 34,15,14
Data.l 35,36,15
Data.l 15,16,17
Data.l 15,37,16
Data.l 15,39,38
Data.l 40,18,14
Data.l 41,19,18
Data.l 42,43,19
Data.l 44,46,45
Data.l 47,49,48
Data.l 50,52,51
Data.l 19,53,18
Data.l 19,55,54
Data.l 19,57,56
Data.l 58,10,14
Data.l 59,60,10
Data.l 61,63,62
Data.l 64,65,2
Data.l 66,68,67
Data.l 69,71,70

icosahedron:
; Nb sommets / Nb faces
Data.l 42,20

; Vertices: pos / normals / uv
Data.f 0,0.851651,0.526731
Data.f 0,1,0
Data.f 0,0.690983
Data.f 0,0.851651,-0.524731
Data.f 0,1,0
Data.f 0,1.309020
Data.f 0.851651,0.526731,0
Data.f 0.356822,0.934172,0
Data.f 0.5,1
Data.f 0.526731,0,0.851651
Data.f 0.810146,0,0.586227
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f 0,0,1
Data.f 0,1.309020
Data.f -0.849651,0.526731,0
Data.f -0.934172,0.356822,0
Data.f 0,0.690983
Data.f -0.524731,0,-0.849651
Data.f -0.810146,0,-0.586227
Data.f -0.5,1
Data.f 0.526731,0,-0.849651
Data.f 0,0,-1
Data.f 0,0.690983
Data.f 0.851651,-0.524731,0
Data.f 0.934172,-0.356822,0
Data.f 0,1.309020
Data.f 0,-0.849651,-0.524731
Data.f 0,-0.356822,-0.934172
Data.f -0.5,1
Data.f 0,-0.849651,0.526731
Data.f 0,-0.707107,0.707107
Data.f 0.309017,1.5
Data.f -0.849651,-0.524731,0
Data.f -0.934172,-0.356822,0
Data.f 0,1.309020
Data.f 0.851651,0.526731,0
Data.f 0.577350,0.577350,0.577350
Data.f 0,0.690983
Data.f 0,0.851651,0.526731
Data.f 0.577350,0.577350,0.577350
Data.f 0.309017,0.5
Data.f 0.526731,0,0.851651
Data.f 0,0.356822,0.934172
Data.f 0,0.690983
Data.f 0,0.851651,0.526731
Data.f 0,0.356822,0.934172
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f -0.577350,0.577350,0.577350
Data.f 0.5,1
Data.f 0,0.851651,0.526731
Data.f -0.577350,0.577350,0.577350
Data.f 0.309017,0.5
Data.f -0.849651,0.526731,0
Data.f -0.356822,0.934172,0
Data.f -0.5,1
Data.f 0,0.851651,-0.524731
Data.f -0.577350,0.577350,-0.577350
Data.f -0.309017,0.5
Data.f -0.524731,0,-0.849651
Data.f 0,0.356822,-0.934172
Data.f 0,1.309020
Data.f 0,0.851651,-0.524731
Data.f 0,0.356822,-0.934172
Data.f 0.5,1
Data.f 0.526731,0,-0.849651
Data.f 0.577350,0.577350,-0.577350
Data.f -0.5,1
Data.f 0.851651,0.526731,0
Data.f 0.577350,0.577350,-0.577350
Data.f 0,0.690983
Data.f 0,0.851651,-0.524731
Data.f 0.577350,0.577350,-0.577350
Data.f -0.309017,0.5
Data.f 0.851651,0.526731,0
Data.f 0.934172,0,0.356822
Data.f 0,0.690983
Data.f 0.851651,0.526731,0
Data.f 0.934172,0,-0.356822
Data.f 0,0.690983
Data.f 0.526731,0,-0.849651
Data.f 0.934172,0,-0.356822
Data.f -0.5,1
Data.f -0.524731,0,-0.849651
Data.f 0,-0.356822,-0.934172
Data.f 0,1.309020
Data.f 0,-0.849651,-0.524731
Data.f 0.577350,-0.577350,-0.577350
Data.f -0.309017,1.5
Data.f 0.526731,0,-0.849651
Data.f 0.577350,-0.577350,-0.577350
Data.f -0.5,1
Data.f 0.851651,-0.524731,0
Data.f 0.356822,-0.934172,0
Data.f 0.5,1
Data.f 0,-0.849651,-0.524731
Data.f 0.356822,-0.934172,0
Data.f 0,1.309020
Data.f 0,-0.849651,0.526731
Data.f 0.356822,-0.934172,0
Data.f 0,0.690983
Data.f 0,-0.849651,-0.524731
Data.f -0.577350,-0.577350,-0.577350
Data.f -0.309017,1.5
Data.f -0.849651,-0.524731,0
Data.f -0.356822,-0.934172,0
Data.f -0.5,1
Data.f 0,-0.849651,0.526731
Data.f -0.356822,-0.934172,0
Data.f 0,0.690983
Data.f 0,-0.849651,-0.524731
Data.f -0.356822,-0.934172,0
Data.f 0,1.309020
Data.f 0,-0.849651,0.526731
Data.f 0,-0.356822,0.934172
Data.f -0.5,1
Data.f 0.526731,0,0.851651
Data.f 0,-0.356822,0.934172
Data.f 0,0.690983
Data.f -0.524731,0,0.851651
Data.f -0.577350,-0.577350,0.577350
Data.f 0.5,1
Data.f -0.524731,0,0.851651
Data.f -0.934172,0,0.356822
Data.f 0.5,1

; Faces
Data.l 1,0,2
Data.l 12,13,3
Data.l 14,15,4
Data.l 16,17,5
Data.l 18,0,1
Data.l 5,19,6
Data.l 20,21,7
Data.l 22,24,23
Data.l 25,3,8
Data.l 26,8,27
Data.l 28,7,9
Data.l 29,30,8
Data.l 8,3,10
Data.l 31,33,32
Data.l 6,34,11
Data.l 35,37,36
Data.l 38,39,4
Data.l 10,40,11
Data.l 6,11,5
Data.l 5,11,41

EndDataSection
Par contre, la doc inclue dans le package 4.0.4 est un peu lapidaire; j'ai un peu galèré pour certains trucs (difficultés que j'attribue à mon ignorance des concepts de DirectX. Par exemple, je ne vois toujours pas ce que sont les surfaces, et j'ai une vision assez floue des rapports entre brushes et textures...).

Existe-t-il une doc plus détaillée quelque part ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Par contre, la doc inclue dans le package 4.0.4 est un peu lapidaire; j'ai un peu galèré pour certains trucs
(difficultés que j'attribue à mon ignorance des concepts de DirectX. Par exemple, je ne vois
toujours pas ce que sont les surfaces, et j'ai une vision assez floue des rapports entre brushes et
textures...).
Existe-t-il une doc plus détaillée quelque part ?
La doc reste assez sommaire, et ne fait que survoler sans trop rentrer dans les détails la plupart des
fonctions du moteurs. Détailler plus de 500 fonctions, et ce en Anglais est un sacré travail. C'est Pour
çà que pour combler en partie cette lacune d'une doc sommaire, je fournis un maximum d'exemples pour
illustrer autant que faire ce peut un large éventaille des fonctions et possibilité du moteur.
Il est sûr qu'une bonne base en 3D au départ, cela aide, c'est certain. De plus le moteur est
construit pour le rendre plutot intuitif et abordable, même pour les débutants.
Ceci dit, une connaissance des base de DirectX, ou plutot Direct3D aide en effet à comprendre un peu
mieux certains aspects du moteur, celui-ci étant étroitement lié à cette API. Donc si l'Anglais ne te
rebute pas trop, la doc de DirectX9 est aussi une bonne source d'information, et parfois une aide
précieuse.
Et puis, en cas de soucis, par le biais des forums (ici ou sur le site de DM3D), j'essais d'être toujours
disponique pour expliquer et dépatouiller ceux qui on des soucis.
;)

Ps: tu t'es bien débrouillé pour transposer ton code initial :)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Message par kelebrindae »

@TMyke
Je ne voulais surtout pas remettre en cause la qualité de travail effectué: c'est colossal! Et puis c'est vrai que les exemples m'ont bien aidé...
Détailler plus de 500 fonctions, et ce en Anglais est un sacré travail
Si l'anglais te pose problème, tu peux peut-être faire ça sur le mode collaboratif: tu laisses la doc actuelle en anglais telle qu'elle est, et tu écris une doc plus complète et détaillée dans notre belle langue française, c'est plus simple (même si ça représente déjà un boulot énorme).
Puis, tu fais appel aux bons sentiments des utilisateurs de DreamMotion qui maîtrisent mieux le baragouin de ces @#$% d'english qui nous ont volé notre coupe du monde de rugby, afin qu'ils traduisent chacun une petite partie du truc.

Qu'en penses-tu ?
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Que faut 'il installer exactement pour faire tourner le programme du dessus :oops:
Pour quelqu'un qui hélas pas la chance de trifouiller dans ses entrailles :roll:
http://www.dreamotion3d.com/site/news.php
Répondre