Dreamotion3D : Création d'un cube et questions
Publié : sam. 11/nov./2006 18:31
J'ai repris l'exemple du cube, et j'ai plusieurs questions :
Les axes sont orientés comment ?Je dirais
vers la droite de l'écran pour l'axe des x
vers le haut de l'écran pour l'axe des y
et l'axe des z sort de l'écran
Est-ce bien ça ?
en fait j'ai un doute sur l'axe des z, j'ai l'impression qu'il est dirigé vers l'écran ? ou c'est moi qui devrais faire une pause.
Dans le code qui suit, j'ai défini un cube avec
Face du haut = bleu
Face du bas = blanc
Face de devant = jaune
Face de derrière = orange
Face gauche = vert
Face droite = rouge
Et j'ai le rouge et le vert d'inversés par rapport à la face jaune qui représente la face avant.
J'ai pourtant les vertices de cette face à +0.5 sur l'axe des z.
Deuxième question .
Comment créer une texture transparente, c'est à dire que j'ai mon cube et je peux définir les couleurs de chaque face, mais j'aimerais ajouter un cadre noir sur chaque face, je peux utiliser une texture, mais je voudrais conserver la couleur des faces. J'imagine qu'il faut jouer avec les paramètres de DM_BrushAddRender(*brush, #D3DRS_CULLMODE, #D3DCULL_NONE) ? j'ai pas trouvé les bons.
Pour tester le code avec la texture il suffit d'enlever le commentaire devant cette ligne ;DM_PaintEntity(*entity, *brush, 0).
Dernier point, les pivots c'est pas mal, mais j'ai la même question qu'avec les joints, comment on fait pour supprimer une association à un pivot ?
et pour faire changer de pivot à une entity ?
Les axes sont orientés comment ?Je dirais
vers la droite de l'écran pour l'axe des x
vers le haut de l'écran pour l'axe des y
et l'axe des z sort de l'écran
Est-ce bien ça ?
en fait j'ai un doute sur l'axe des z, j'ai l'impression qu'il est dirigé vers l'écran ? ou c'est moi qui devrais faire une pause.
Dans le code qui suit, j'ai défini un cube avec
Face du haut = bleu
Face du bas = blanc
Face de devant = jaune
Face de derrière = orange
Face gauche = vert
Face droite = rouge
Et j'ai le rouge et le vert d'inversés par rapport à la face jaune qui représente la face avant.
J'ai pourtant les vertices de cette face à +0.5 sur l'axe des z.
Deuxième question .
Comment créer une texture transparente, c'est à dire que j'ai mon cube et je peux définir les couleurs de chaque face, mais j'aimerais ajouter un cadre noir sur chaque face, je peux utiliser une texture, mais je voudrais conserver la couleur des faces. J'imagine qu'il faut jouer avec les paramètres de DM_BrushAddRender(*brush, #D3DRS_CULLMODE, #D3DCULL_NONE) ? j'ai pas trouvé les bons.
Pour tester le code avec la texture il suffit d'enlever le commentaire devant cette ligne ;DM_PaintEntity(*entity, *brush, 0).
Dernier point, les pivots c'est pas mal, mais j'ai la même question qu'avec les joints, comment on fait pour supprimer une association à un pivot ?
et pour faire changer de pivot à une entity ?
Code : Tout sélectionner
;-Fichiers Include
IncludePath "Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"
Declare CreateCube()
Global *camera.CEntity
Global *font.CFont
Define *Cube
Global *brush.CBrush
Global *texture.CTexture
;-Initialisation
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
End
EndIf
;-ouvre un ecran 3D
DM_Graphics3D(800, 600, 32, 1, 1)
*font = DM_LoadFont( "Arial",16, 2)
;-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 du cube
*Cube = CreateCube()
DM_ScaleEntity(*Cube, 20, 20, 20)
;-Camera
*camera = DM_CreateCamera(#Null)
DM_PositionEntity(*camera, 0, 50, 150)
DM_CameraClsColor(*camera, 25, 25, 25)
DM_PointEntity(*camera, *Cube)
Repeat
ExamineKeyboard()
DM_TurnEntity(*Cube, 0, 1, 0)
DM_BeginScene()
DM_Renderworld()
DM_EndScene()
Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
End
Procedure CreateCube()
Define.CEntity *entity
*entity = DM_CreateMesh(12, 24, 1, #Null)
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 = 0 : Vert = 0 : Bleu = 0
;Couleur dessus
If i >=0 And i <=3
Rouge = 0 : Vert = 0 : bleu = 255
EndIf
;Couleur dessous
If i >=4 And i <=7
Rouge = 255 : Vert = 255 : bleu = 255
EndIf
;Couleur devant
If i >=8 And i <=11
Rouge = 255 : Vert = 255 : bleu = 0
EndIf
;Couleur derriere
If i >=12 And i <=15
Rouge = 255 : Vert = 128 : bleu = 0
EndIf
;Couleur gauche
If i >=16 And i <=19
Rouge = 0 : Vert = 255 : bleu = 0
EndIf
;Couleur droit
If i >=20 And i <=23
Rouge = 255 : Vert = 0 : bleu = 0
EndIf
;les coordonnées de vertex
DM_VertexCoords(*entity, i, x, y, z)
;les coordonnées de texture (canal 0)
DM_VertexTexCoords(*entity, i, 0, u, v)
;Couleurs
DM_VertexColor(*entity, i, rouge, vert, bleu, 255)
Next i
;les triangles
Restore Indice
For i = 0 To 11
Read v1.l : Read v2.l : Read v3.l
DM_VertexTriangle(*entity, i, v1, v2, v3, 0)
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, 1, 0
Data.f -0.5,-0.5,-0.5, 1, 1
Data.f 0.5,-0.5, 0.5, 0, 0
Data.f 0.5,-0.5,-0.5, 0, 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
;Derrière
Data.f -0.5, 0.5,-0.5, 1, 0
Data.f 0.5, 0.5,-0.5, 1, 1
Data.f -0.5,-0.5,-0.5, 0, 0
Data.f 0.5,-0.5,-0.5, 0, 1
;Gauche
Data.f -0.5, 0.5,-0.5, 1, 0
Data.f -0.5,-0.5,-0.5, 1, 1
Data.f -0.5, 0.5, 0.5, 0, 0
Data.f -0.5,-0.5, 0.5, 0, 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