Dreamotion3D

Généralités sur la programmation 3D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

un petit exemple avec les pivots , à placer dans le répertoire samples, j'utilise les mêmes médias que l'exemple pivots.

Sinon des nouvelles pour le rubick cube ? je ne sais plus ce qui manquait pour que ça fonctionne .

Code : Tout sélectionner

; ------------------------------------------------------------
;   DreaMotion3D
;
;                   Pivot and Parent
;   Historique  :
;     18/09/06  00:00    DreaMotion3D Team
;     12/11/06  19:16    TMyke
;
; ------------------------------------------------------------

; Fichiers Include 
IncludePath "..\Include\"
  IncludeFile "d3dx9.pbi"
  IncludeFile "dreamotion3d.pbi"

EnableExplicit
;-Constantes
#NBPivot   = 4
#NbBranche = 7  

;-Variables et tableaux
Define.l i, j
Define.CFont *font
Define.CEntity *camera
Dim *mesh.CEntity(#NbBranche, #NBPivot)
Dim *pivot.CEntity(#NbBranche, #NBPivot)

;-Initialisation des différents modules
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
  End
EndIf

;-Initialise la fenêtre graphique
DM_Graphics3D(800, 600, 32,  1, 1)

;-Charge une font
*font = DM_LoadFont( "Arial",8 , 1)
DM_SetColorText (*font, 198, 198, 198, 255) 
SetCurrentDirectory("media/")
  
;-constitution de l'ensemble
For j = 0 To #NbBranche
  ;Pivot au centre
  *pivot(j, 0) = DM_CreatePivot()
  ; premier bras sur le pivot 0
  *mesh(j, 0) = DM_LoadEntity("cube1.x", *pivot(j, 0))
  DM_TranslateEntity(*mesh(j, 0), 0, 0, 25)
  
  ;D'autres articulations
  For i = 0 To #NBPivot - 1
    *pivot(j, i + 1) = DM_CreatePivot(*mesh(j, i))
    DM_TranslateEntity(*pivot(j, i + 1), 0, 0, 25)
    *mesh(j, i + 1) = DM_LoadEntity("cube1.x", *pivot(j, i + 1))
    DM_TranslateEntity(*mesh(j, i + 1), 0, 0, 25)
  Next i
Next j

*camera = DM_CreateCamera()
DM_TranslateEntity(*camera, 0, 0, 500)
DM_PointEntity(*camera, *pivot(0, 2))

;Déplace la souris
MouseLocate(200, 0)

Repeat

	ExamineKeyboard()
	ExamineMouse() 

  For j = 0 To #NbBranche
    DM_rotateEntity(*pivot(j, 0), (45-(MouseY()/8)), 360.0/(#NbBranche+1) * j + (MouseX()/2), 0) 
    For i = 1 To #NBPivot
      DM_rotateEntity(*pivot(j, i), 45-(MouseY()/8), 0, 0) 
    Next i
  Next j
  
	DM_BeginScene()
  	DM_RenderWorld()
	  DM_DrawText(*font, 0, 0, "FPS : "+Str(DM_FPS()))
	  DM_DrawText(*font, 0, 20, "Bougez la souris")
	DM_EndScene()
  	
Until KeyboardReleased(#PB_Key_Escape) 
DM_ClearGraphics()
End
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
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 »

Super fun, un petit code a ajouter dans le pack, si tu est d'accord ... Smile

Pour le Rubis, attend un peu, je suis en train de refondre le coeur du
moteur, j'aurais je pense réglé les soucis de matrice et de recupération des
angles, du moins au sein de moteur graphique lui meme...
Force et sagesse...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tmyke a écrit : un petit code a ajouter dans le pack, si tu est d'accord ... Smile
bien sûr :)

J'attends de voir ce que donne la nouvelle mouture du moteur :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

une nouvelle screen de l'editeur :
Image
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

YAME = Yet Another Map Editor ?
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

Progi1984 a écrit :YAME = Yet Another Map Editor ?
Presque :o mais la signification est un secret pour l'instant .
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bah, ca pète bien en tout cas :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

DM_DetachEntity() a disparu ? c'est remplacé par quoi ?

Dans le fichier changements.txt il y a ça :
-nouvelles instructions:
- un certains nombres

- améliorations:
- asser peu ;)
ça aide énormément :)
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 »

simplification des instructions, donc (cf doc) :

DM_EntityParent(*child.CEntity, *parent.CEntity=#Null, glob.b=#True)

Permet d'affecter à une entité un parent. Si le parametre passé est #Null, alors, l'entité n'a plus de parenté (si elle en avait une )

(y-a du rubis cube dans l'air)
:wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Et DM_EntityFormat() est remplacé par quoi ?

Je vois encore plein de changement dans la création d'un mesh, ça serait bien de lister tout ce qui a changé dans le fichier changement.


[EDIT]
J'ai un invalide memory access sur cette commande
DM_VertexCoords()
apparemment elle est remplacé par AddVertex() ? mais elle existe toujours dans Dreamotion.pbi
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

après plusieurs plantages, j'ai réussi à transformer mon code pour qu'il tourne, enfin presque, ça ne fonctionne toujours pas le détache entity.

J'ai l'impression que la composante Alpha est en premier
DM_EntityColor(*ent.CEntity, Red.b, Green.b, Blue.b, Alpha.b)
Pour avoir les bonnes couleurs avec le rubik cube j'ai du croiser :
DM_EntityColor(*ent.CEntity, Alpha.b, Red.b, Green.b, Blue.b )
Voici à nouveau le code du rubick cube

Code : Tout sélectionner

;Comtois le 11/11/06
;Rubik 
;Fichiers Include
IncludePath "..\Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"    

Enumeration 
  #Haut
  #Bas
  #Devant
  #Derriere
  #Gauche
  #Droit
  #CentreX
  #CentreY
  #CentreZ
EndEnumeration

Declare CreateCube(x, y, z)
Declare DetacheRotation()
Declare ParentRotation(No)
Declare Rotation(No, S)
Declare MiseAJour(Type, S)


Global *camera.CEntity
Global *font.CFont
Global *brush.CBrush
Global *texture.CTexture
Global *Cube
Global Taille
Define Angle

Global Dim *Pivot(8)
Global Dim *Rubik(2, 2, 2)
Global Dim *TempRubik(2, 2, 2)
;-Initialisation 
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  End
EndIf

;-ouvre un ecran 3D
DM_Graphics3D(800, 600, 32,  1, 1)

;-font
*font = DM_LoadFont("Arial", 8, 1)
DM_SetColorText(*font, 255, 255, 0,255)

;-Texture
*texture = DM_CreateTexture(256,256)
;ré-oriente le buffer de sortie graphique vers notre texture
DM_SetBuffer(*texture)
DM_BeginScene()
  DM_ClsScreen (  0, 0,   0, 255)      ; efface le buffer avec une couleur
  DM_SetColor2D(255, 0,   0, 255)      ; change couleur du trait
  DM_DrawRect  (  1, 1, 254, 254)      ; dessin d'un rectangle 2D
DM_EndScene()
;de nouveau le buffer vers l'ecran
DM_SetBuffer(#Null)

;-Brush
*brush = DM_CreateBrush(Str(*entity))
DM_BrushAmbient(*brush, 255,128,0,255)
DM_BrushDiffuse(*brush, 255,128,0,255)
DM_BrushTexture(*brush, *texture, 0)
; modifie l'état de rendu de la Brush pour voir de tous les cotés
DM_BrushAddRender(*brush, #D3DRS_CULLMODE, #D3DCULL_NONE)

;-Creation rubik cube
Taille = 50
For z = 0 To 2
  For y = 0 To 2
    For x = 0 To 2
      No = CreateCube(x, y, z)
      DM_ScaleEntity(No, Taille - 2, Taille - 2, Taille - 2)
      DM_PositionEntity(No, (x-1) * Taille , (y-1) * Taille , (z-1) * Taille)
      *Rubik(x,y,z) = No
    Next x
  Next y
Next z

;-Pivots
For i = 0 To 8
  *Pivot(i) = DM_CreatePivot()
Next i
Angle = 90
  
;-Light
;DM_AmbiantLight(180, 180, 180)

;-camera
*camera = DM_CreateCamera(#Null)
DM_CameraClsColor(*camera, 0, 0, 15)
DM_PositionEntity(*camera, DM_EntityX(*Rubik(1,1,1)) + 250,DM_EntityY(*Rubik(1,1,1)) + 250, DM_EntityZ(*Rubik(1,1,1)) - 250)
DM_PointEntity(*camera, *Rubik(1,1,1))

;-Boucle principale
Repeat

  ExamineKeyboard()
    
  If KeyboardReleased(#PB_Key_F1)
    Pause = 1 - Pause
  EndIf

  ExamineMouse()
;   If MouseButton(#PB_MouseButton_Left)
;     *Cube = DM_CameraPick(*camera, MouseX(), MouseY())
;     ;Recherche le cube 
;     For x = 0 To 2
;       For y = 0 To 2
;         For z = 0 To 2
;           If *Rubik(x, y, z) = *Cube
;             px = x : py = y : pz = z 
;             Break 3
;           EndIf
;         Next z
;       Next y
;     Next x  
;     ;Calcul le type de rotation en fonction de la position du cube
;     If MouseDeltaX()<>0 Or MouseDeltaY()<>0
;       Dx.f = MouseDeltaX()
;       Dy.F = MouseDeltaY()
;     EndIf
;           
;   EndIf

  If Angle < 90
    If pause = 0
    Rotation(Type, Sens)
    Angle + 1
    EndIf
    If Angle = 90
      MiseAjour(Type, Sens)       
    EndIf  
  EndIf

  If Angle = 90
    DetacheRotation()
    Angle = 0
    Type = Random(8)
    ;Type = #CentreZ 
    Repeat
      Sens = 1-Random(2)
    Until Sens <> 0
    ParentRotation(Type)
  EndIf
    
  DM_BeginScene()
    DM_Renderworld()
    DM_DrawText(*font,0,0,StrF(DX,2) + " : " + StrF(dy,2))
    DM_SetColor2D(255, 255, 255, 255)
    DM_DrawOval(MouseX(), MouseY(), 8, 8)
  DM_EndScene()

Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
End

Procedure MiseAjour(Type, Sens)
  Define *Temp
  If Type = #Haut Or Type = #Droit Or Type = #Derriere
    h = 2
  ElseIf Type = #CentreX Or Type = #CentreY Or Type = #CentreZ
    h = 1
  ElseIf Type = #Bas Or Type = #Gauche Or type = #Devant
    h = 0
  EndIf  
  
  CopyMemory(*Rubik(), *TempRubik(), SizeOf(Long) * 27)

  If Type = #Haut Or Type = #Bas Or Type = #CentreY 
    If Sens
      
      *Rubik(0, h, 2) = *TempRubik(2, h, 2)  
      *Rubik(1, h, 2) = *TempRubik(2, h, 1)
      *Rubik(2, h, 2) = *TempRubik(2, h, 0)
      
      *Rubik(0, h, 1) = *TempRubik(1, h, 2)  
      *Rubik(1, h, 1) = *TempRubik(1, h, 1)
      *Rubik(2, h, 1) = *TempRubik(1, h, 0)  
      
      *Rubik(0, h, 0) = *TempRubik(0, h, 2)
      *Rubik(1, h, 0) = *TempRubik(0, h, 1)
      *Rubik(2, h, 0) = *TempRubik(0, h, 0)
    Else
      
      *Rubik(0, h, 0) = *TempRubik(0, h, 2)  
      *Rubik(0, h, 1) = *TempRubik(1, h, 2)
      *Rubik(0, h, 2) = *TempRubik(2, h, 2)
      
      *Rubik(1, h, 0) = *TempRubik(0, h, 1)  
      *Rubik(1, h, 1) = *TempRubik(1, h, 1)
      *Rubik(1, h, 2) = *TempRubik(2, h, 1)  
      
      *Rubik(2, h, 0) = *TempRubik(0, h, 0)
      *Rubik(2, h, 1) = *TempRubik(1, h, 0)
      *Rubik(2, h, 2) = *TempRubik(2, h, 0)

    EndIf
  
  ElseIf Type = #Gauche Or Type = #Droit Or Type = #CentreX    
    If Sens
      
      *Rubik(h, 0, 0) = *TempRubik(h, 0, 2)  
      *Rubik(h, 0, 1) = *TempRubik(h, 1, 2)
      *Rubik(h, 0, 2) = *TempRubik(h, 2, 2)
      
      *Rubik(h, 1, 0) = *TempRubik(h, 0, 1)  
      *Rubik(h, 1, 1) = *TempRubik(h, 1, 1)
      *Rubik(h, 1, 2) = *TempRubik(h, 2, 1)  
      
      *Rubik(h, 2, 0) = *TempRubik(h, 0, 0)
      *Rubik(h, 2, 1) = *TempRubik(h, 1, 0)
      *Rubik(h, 2, 2) = *TempRubik(h, 2, 0)

    Else
      
      *Rubik(h, 0, 2) = *TempRubik(h, 2, 2)  
      *Rubik(h, 1, 2) = *TempRubik(h, 2, 1)
      *Rubik(h, 2, 2) = *TempRubik(h, 2, 0)
      
      *Rubik(h, 0, 1) = *TempRubik(h, 1, 2)  
      *Rubik(h, 1, 1) = *TempRubik(h, 1, 1)
      *Rubik(h, 2, 1) = *TempRubik(h, 1, 0)  
      
      *Rubik(h, 0, 0) = *TempRubik(h, 0, 2)
      *Rubik(h, 1, 0) = *TempRubik(h, 0, 1)
      *Rubik(h, 2, 0) = *TempRubik(h, 0, 0)

    EndIf  
  
  Else  
    If Sens
    
      *Rubik(0, 0, h) = *TempRubik(0, 2, h)  
      *Rubik(0, 1, h) = *TempRubik(1, 2, h)
      *Rubik(0, 2, h) = *TempRubik(2, 2, h)
      
      *Rubik(1, 0, h) = *TempRubik(0, 1, h)  
      *Rubik(1, 1, h) = *TempRubik(1, 1, h)
      *Rubik(1, 2, h) = *TempRubik(2, 1, h)  
      
      *Rubik(2, 0, h) = *TempRubik(0, 0, h)
      *Rubik(2, 1, h) = *TempRubik(1, 0, h)
      *Rubik(2, 2, h) = *TempRubik(2, 0, h) 
      
    Else
    
      *Rubik(0, 2, h) = *TempRubik(2, 2, h)  
      *Rubik(1, 2, h) = *TempRubik(2, 1, h)
      *Rubik(2, 2, h) = *TempRubik(2, 0, h)
      
      *Rubik(0, 1, h) = *TempRubik(1, 2, h)  
      *Rubik(1, 1, h) = *TempRubik(1, 1, h)
      *Rubik(2, 1, h) = *TempRubik(1, 0, h)  
      
      *Rubik(0, 0, h) = *TempRubik(0, 2, h)
      *Rubik(1, 0, h) = *TempRubik(0, 1, h)
      *Rubik(2, 0, h) = *TempRubik(0, 0, h)       

    EndIf
    
  EndIf
  
EndProcedure

Procedure DetacheRotation()
  For x = 0 To 2
    For y = 0 To 2 
      For z = 0 To 2
        If DM_GetParent(*Rubik(x, y, z))
          ;DM_DetachEntity(*Rubik(x, y, z))
          DM_EntityParent(*Rubik(x, y, z))
        EndIf  
      Next z
    Next y  
  Next x 
EndProcedure
Procedure ParentRotation(No)
  Select No
    Case #Haut 
      For x = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(x, 2, z), *Pivot(#Haut))
        Next z
      Next x      
    Case #Bas
      For x = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(x, 0, z), *Pivot(#Bas))
        Next z
      Next x  
    Case #Devant
      For x = 0 To 2
        For y = 0 To 2
          DM_EntityParent(*Rubik(x, y, 0), *Pivot(#Devant))
        Next y
      Next x  
    Case #Derriere
      For x = 0 To 2
        For y = 0 To 2
          DM_EntityParent(*Rubik(x, y, 2), *Pivot(#Derriere))
        Next y
      Next x  
    Case #Gauche
      For y = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(0, y, z), *Pivot(#Gauche))
        Next z
      Next y  
    Case #Droit
      For y = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(2, y, z), *Pivot(#Droit))
        Next z
      Next y   
    Case #CentreX
      For y = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(1, y, z), *Pivot(#CentreX))
        Next z
      Next y 
    Case #CentreY 
      For x = 0 To 2
        For z = 0 To 2
          DM_EntityParent(*Rubik(x, 1, z), *Pivot(#CentreY))
        Next z
      Next x  
    Case #CentreZ 
      For x = 0 To 2
        For y = 0 To 2
          DM_EntityParent(*Rubik(x, y, 1), *Pivot(#CentreZ))
        Next y
      Next x               
  EndSelect
EndProcedure
Procedure Rotation(No, S)
  Select No
    Case #Haut 
      DM_TurnEntity(*pivot(#Haut)    , 0, S, 0)
    Case #Bas
      DM_TurnEntity(*pivot(#Bas)     , 0, S, 0)
    Case #Devant
      DM_TurnEntity(*pivot(#Devant)  , 0, 0, S)
    Case #Derriere
      DM_TurnEntity(*pivot(#Derriere), 0, 0, S)
    Case #Gauche
      DM_TurnEntity(*pivot(#Gauche)  , S, 0, 0)
    Case #Droit
      DM_TurnEntity(*pivot(#Droit)   , S, 0, 0)
    Case #CentreX
      DM_TurnEntity(*pivot(#CentreX) , S, 0, 0)
    Case #CentreY 
      DM_TurnEntity(*pivot(#CentreY) , 0, S, 0)
    Case #CentreZ 
      DM_TurnEntity(*pivot(#CentreZ) , 0, 0, S)    
  EndSelect
EndProcedure
Procedure CreateCube(xx, yy, zz)
  Define.CEntity *entity
  
  *entity = DM_CreateMesh()
  *surface = DM_CreateSurface(*entity)

  Restore Vertex
  For i= 0 To 23
    Read x.f : Read y.f : Read z.f
    Read u.f : Read v.f
    ;Read Rouge : Read Vert : Read bleu
    rouge = 70 : Vert = 60 : Bleu = 80
    ;Couleur dessus
    If yy = 2 And i >=0 And i <=3
      Rouge = 0 : Vert = 0 : bleu = 255
    EndIf
    ;Couleur dessous
    If yy = 0 And i >=4 And i <=7
      Rouge = 255 : Vert = 255 : bleu = 255
    EndIf
    ;Couleur derriere
    If zz = 2 And i >=8 And i <=11
      Rouge = 255 : Vert = 255 : bleu = 0
    EndIf
    ;Couleur devant
    If zz = 0 And i >=12 And i <=15
      Rouge = 255 : Vert = 128 : bleu = 0
    EndIf
    ;Couleur gauche
    If xx = 0 And i >=16 And i <=19
      Rouge = 0 : Vert = 255 : bleu = 0
    EndIf      
    ;Couleur droit
    If xx = 2 And i >=20 And i <=23
      Rouge = 255 : Vert = 0 : bleu = 0
    EndIf  
    ;les coordonnées de vertex
    DM_AddVertex(*surface, x, y, z, u, v)
    ;Couleurs 
    DM_VertexColor(*surface, i, 255,rouge, vert, bleu)    
  Next i
  ;les triangles
  Restore Indice
  For i = 0 To 11
    Read v1.l : Read v2.l : Read v3.l
    DM_AddTriangle(*surface, v1, v2, v3)
  Next i
  ; affecte la brush créee a notre entity
  ;DM_PaintEntity(*entity, *brush, 0)
  ; génératon auto des normales de l'entity créée
  DM_UpdateNormal(*entity)
  ProcedureReturn *entity
EndProcedure
DataSection
Vertex:
; liste des 24 vertex avec leurs coordonnées de textures
;Haut
Data.f -0.5, 0.5, 0.5, 0, 0
Data.f  0.5, 0.5, 0.5, 0, 1
Data.f -0.5, 0.5,-0.5, 1, 0
Data.f  0.5, 0.5,-0.5, 1, 1

;Bas
Data.f -0.5,-0.5, 0.5, 0, 0
Data.f -0.5,-0.5,-0.5, 0, 1
Data.f  0.5,-0.5, 0.5, 1, 0
Data.f  0.5,-0.5,-0.5, 1, 1

;Derrière
Data.f -0.5, 0.5, 0.5, 0, 0
Data.f -0.5,-0.5, 0.5, 0, 1
Data.f  0.5, 0.5, 0.5, 1, 0
Data.f  0.5,-0.5, 0.5, 1, 1

;Devant
Data.f -0.5, 0.5,-0.5, 0, 0
Data.f  0.5, 0.5,-0.5, 0, 1
Data.f -0.5,-0.5,-0.5, 1, 0
Data.f  0.5,-0.5,-0.5, 1, 1

;Gauche
Data.f -0.5, 0.5,-0.5, 0, 0
Data.f -0.5,-0.5,-0.5, 0, 1
Data.f -0.5, 0.5, 0.5, 1, 0
Data.f -0.5,-0.5, 0.5, 1, 1

;Droit
Data.f  0.5, 0.5,-0.5, 0, 0
Data.f  0.5, 0.5, 0.5, 0, 1
Data.f  0.5,-0.5,-0.5, 1, 0
Data.f  0.5,-0.5, 0.5, 1, 1

Indice:
;liste des faces
Data.l  0,  1,  2
Data.l  1,  3,  2
Data.l  4,  5,  6
Data.l  5,  7,  6
Data.l  8,  9, 10
Data.l  9, 11, 10
Data.l 12, 13, 14
Data.l 13, 15, 14
Data.l 16, 17, 18
Data.l 17, 19, 18
Data.l 20, 21, 22
Data.l 21, 23, 22
EndDataSection
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 »

Il y a quelques changement au niveau syntaxe ainsi qu'au niveau de la creation des mesh, en effet. Elle s'est enfin stabliliée, et ne devrait plus changer.

par exemple, DM_LoadEntity() est remplacé par DM_LoadMesh().
sa syntaxe (cf doc) est la suivante:

DM_LoadMesh.l(filename.s, *parent.CEntity = #Null, format.l=#D3DFVF_XYZ | #D3DFVF_NORMAL | #D3DFVF_DIFFUSE | #D3DFVF_TEX2)

la définition du format DirectX de ton mesh est donc a définir en fin d'instruction,
si la def par défaut ne te convient pas.

Pour la creation de Mesh en 'manuel', la encore la manière et la syntaxe est désormais
qualquée trait pour trait sur celle de B3D:

chaque mesh peut donc contenir une ou plusieurs surfaces, et pour créer un mesh a partir
de surface, une sequence comme celle-ci peut etre ecrite:

Code : Tout sélectionner

*ent = DM_CreateMesh()
*surface = DM_CreateSurface(*ent) 
; définition des coordonnées des vertices	
DM_AddVertex(*surface, 10, 0, 10 , 1,0 )
DM_AddVertex(*surface, 10, 0,-10 ,1,1)
DM_AddVertex(*surface1, -10, 0,-10 ,0,1)
DM_AddVertex(*surface1, -10, 0, 10 ,0,0)
DM_AddTriangle(*surface1, 0,1,2)
DM_AddTriangle(*surface1, 2,3,0)
Pour les pivot, le problème a été réglé en partie, la séparation se passe
désormais bien, mais dès qu'il faut relier une entity a une autre par
parenté, la encore, cela n'est pas terrible.

Pour DM_EntityColor(), j'ai refait des test, et les paramètres semble bien correctes (RGBA). A confirmer , un petit code pour tester:

Code : Tout sélectionner

  Global	*camera.CEntity
  Global *cam.CEntity
  
  ;  Initialisation des différents modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; Initialise la fenêtre graphique
  DM_Graphics3D(800, 600, 32,  0, 1)
  ; Charge une font
  DM_AmbiantLight(150,  150,  150)
  
  *cam  = DM_CreateCube();DM_LoadMesh("cam.x")
  DM_EntityColor(*cam, 255,0,0,255)
  
  *camera   = DM_CreateCamera()
  DM_MoveEntity(*camera, 0,0,-10)
  Repeat
  	ExamineKeyboard() 	
    If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
    EndIf
    If KeyboardPushed(#PB_Key_F1) :   DM_EntityColor(*cam, 255,0,0,0)  :    EndIf
    If KeyboardPushed(#PB_Key_F2) :   DM_EntityColor(*cam, 0,255,0,0)  :    EndIf
    If KeyboardPushed(#PB_Key_F3) :   DM_EntityColor(*cam, 0,0,255,0)  :    EndIf   
  	DM_BeginScene()
    	DM_RenderWorld()
  	DM_EndScene()	
  Until Quit=1
  DM_ClearGraphics()
  End
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

:oops: je me suis trompé en recopiant, c'est pas DM_EntityColor() qui merdouille mais DM_VertexColor().

Et merci pour les explications pour les meshs manuels, c'est déjà plus clair.
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 »

Pas de soucis, je regarde cela, et je resposte dès que j'ai constaté mon délis d'étourderie :lol:
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 »

Et oui, tu avais raison, j'ai corrigé, le module simple est a jours (plus un bug
sur le picking corrigé constaté sur le forum anglais)

Merci. :)
Répondre