Page 5 sur 62

Publié : dim. 08/oct./2006 17:20
par tmyke
Tout d'abord voici un petit peu comment sont constituées les Entity
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
EndDataSection
La syntaxe de DM3D a légèrement évoluée (par exemple plus d'instruction
genre 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

Publié : dim. 08/oct./2006 18:10
par comtois
j'ai une erreur à cette ligne

Code : Tout sélectionner

DM_VertexCoords(*ent, i, x,y,z)
j'ai pourtant installé le dernier module.

dans ce module j'ai trouvé les dll, les .lib mais pas le nouveau dreamotion3D.pbi, je suppose qu'il a évolué lui aussi ?

Publié : dim. 08/oct./2006 18:50
par comtois
J'ai ajouté les déclarations des fonctions manquantes dans le fichier dreamotion3D.pbi , je peux enfin voir le cube :)

il a fallu que j'ajoute notamment
DM_VertexTriangle(*entity.CEntity, i.l, v1.l,v2.l,v3.l, surface.l)
Mais il y avait déjà ?
DM_TriangleVertex(*entity.CEntity, face.l, *triangle)
les deux commandes sont possibles ? j'ai pas testé

Publié : dim. 08/oct./2006 19:03
par tmyke
:oops: en effet j'ai oublié le wrap (Dreamotion3d.pbi), je vais corriger cela.
Il semble que tu ai réussi cependant a combler la chose par toi meme, tant mieux.

sinon:

DM_VertexTriangle() permet de definir un triangle 'n' dans une entity,

alors que

DM_TriangleVertex() permet de récupérer les info d'un triangle 'n' d'une entity. (dans un tableau 'triangle.l(3)' )

Publié : dim. 08/oct./2006 19:25
par comtois
j'ai ajouté cette ligne dans la boucle

Code : Tout sélectionner

DM_TurnEntity(*Entity, 1, 1, 1)
et il manque un triangle au cube.
Mais ça ne correspond pas à une face, fais l'essai pour comprendre ce que je veux dire.

Si je change la boucle

Code : Tout sélectionner

  ;les triangles
  Restore Indice
  For i = 0 To 10
    Read v1.l
    Read v2.l
    Read v3.l
    DM_VertexTriangle(*entity, i, v1, v2, v3, 0)
  Next i
là oui il manque un triangle complet, est-ce que tu vois de quoi je parle ?

Publié : dim. 08/oct./2006 19:30
par comtois
ok , rien de grave c'est juste une petite erreur dans la définition des triangles
Voici une version corrigée.
Il me plait bien ce moteur, je vais essayer de faire autre chose qu'un cube maintenant :)

Code : Tout sélectionner

DataSection
Vertex:
; liste des 24 vertex avec eurs coordonnées de textures
Data.f -10, 10,-10, 1, 0 
Data.f  10, 10,-10, 1, 1
Data.f -10,-10,-10, 0, 0
Data.f  10,-10,-10, 0, 1
Data.f -10, 10, 10, 0, 0 
Data.f -10,-10, 10, 0, 1
Data.f  10, 10, 10, 1, 0 
Data.f  10,-10, 10, 1, 1
Data.f -10, 10, 10, 0, 0
Data.f  10, 10, 10, 0, 1
Data.f -10, 10,-10, 1, 0
Data.f  10, 10,-10, 1, 1
Data.f -10,-10, 10, 1, 0
Data.f -10,-10,-10, 1, 1
Data.f  10,-10, 10, 0, 0
Data.f  10,-10,-10, 0, 1
Data.f  10, 10,-10, 0, 0
Data.f  10, 10, 10, 0, 1
Data.f  10,-10,-10, 1, 0
Data.f  10,-10, 10, 1, 1
Data.f -10, 10,-10, 1, 0 
Data.f -10,-10,-10, 1, 1 
Data.f -10, 10, 10, 0, 0 
Data.f -10,-10, 10, 0, 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

Publié : dim. 08/oct./2006 19:33
par tmyke
une petite erreur dans l'index des faces, sur la face numero 4, ou il faut lire
'5,7,6' et non '4,7,6'
:?

Code : Tout sélectionner

; liste des faces
Data.l 0,1,2, 1,3,2, 4,5,6, 5,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

Publié : dim. 08/oct./2006 19:34
par tmyke
Oups, on a posté en meme temps je crois :lol:

Publié : mer. 11/oct./2006 19:36
par comtois
j'aime bien faire des petits codes sans média.
MAintenant je sais comment faire un mesh, et pour la texture comment procéder ?

j'ai vu DM_CreateTexture.l(width.l , height.l), mais ensuite ? comment on dessine dans la texture ?

Publié : mer. 11/oct./2006 20:07
par tmyke
j'te fais un p'tit code et je te poste cela demain soir si tout va bien...

Publié : jeu. 12/oct./2006 19:19
par tmyke
Salut, désolé pour le retard (ah le travail...)

En fait il n'existe pas d'instructions pour 'écrire' directement dans les textures.
En fait il faut utiliser une fonction particulière qui permet de ré-orienter la
sortie ecran vers une texture donnée. Il suffit en suite de dessiner avec des instructions
2D a disposition, sprites, texte,etc... les motif que tu veux et voila.
Voici le code avec le cube ou tu as cette fois une texture non pas chargé, mais générée de cette manière.

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
Global	 *font.CFont


;  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)
*font = DM_LoadFont( "Arial",16, 2)


; creation du cube
CreateCube()

;'--------------------------------------------------------------
;' UNE PETITE CAMERA POUR VOIR NOTRE SCENE
;'--------------------------------------------------------------
*camera = DM_CreateCamera(#Null)
DM_MoveEntity(*camera, 0,0,-50)
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)
        
        ;--------------------------------------------------------
        ; c'est ici
        ;--------------------------------------------------------
        ; creation d'une texture vide de 256x256
        *texture = DM_CreateTexture(256,256)
        ; ré-oriente le buffer de sortie graphique vers notre texture
        DM_SetBuffer(*texture)
        ; debut d'un rendu
        DM_BeginScene()
          DM_ClsScreen(210,0,255,0) ; efface le buffer avec une couleur
          DM_DrawRect(10,10,200,200)  ; dessin d'un rectangle 2D
          DM_SetColor2D(222, 0,0,255) ; change couleur du trait
          DM_DrawOval(100,100,50,50) ; dessin oval 2D
     	  DM_DrawText(*font, 10, 15, "TEXTURE")  ; un petit texte
         ;' fin rendu
        DM_EndScene()
        ; de nouveau le buffer vers l'ecran
        DM_SetBuffer(#Null)
        
        
        DM_BrushTexture(*bb, *texture,0)
        ; 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, 0, 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, 5,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
:wink:

Publié : jeu. 12/oct./2006 23:44
par comtois
wow, super :)

Je vais étudier ça , merci .

Publié : sam. 14/oct./2006 22:41
par comtois
Pour me faire la main je commence à réécrire certains de mes codes avec ton moteur, mais j'ai un souci avec l'éclairage, dès que je valide une lumière ou même la lumière ambiante le cylindre n'est plus affiché en bleu , tout est gris. où est mon erreur ?

pour les light j'ai fait ce code
;-Light
;DM_AmbiantLight(85, 85, 85)
;*light = DM_CreateLight(1, #Null)
;DM_LightColor(*light, 255, 5, 5, 5)
;DM_PositionEntity(*light, 100, 150, 0)

Code : Tout sélectionner

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


Declare CreateCylindre(m,h.f)

Global  *camera.CEntity
Global  *brush.CBrush
Global  *texture.CTexture
Global  *entity.CEntity
Global  *font.CFont
Global *light.CEntity

Global meridien.l
meridien=90

; 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)
*font = DM_LoadFont( "Arial",16, 2)

;'--------------------------------------------------------------
;' UNE PETITE CAMERA POUR VOIR NOTRE SCENE
;'--------------------------------------------------------------
*camera = DM_CreateCamera(#Null)
DM_MoveEntity(*camera, 0,0,-50)
DM_CameraClsColor(*camera, 25, 25, 25)

;-Light
;DM_AmbiantLight(85,  85,  85)
;*light = DM_CreateLight(1, #Null)
;DM_LightColor(*light, 255,  5,  5, 5)
;DM_PositionEntity(*light, 100, 150, 0)

;creation du cube
CreateCylindre(meridien,1)

Repeat

  ExamineKeyboard()
  DM_TurnEntity(*entity,1,1,1)

  ;debut rendu
  DM_BeginScene()
  ;rendu scene
  DM_Renderworld()
  ;fin rendu
  DM_EndScene()

Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
End

Procedure CreateCylindre(m,h.f)

  ;m = méridien
  ;h = hauteur
  ;Le rayon est égal à 1 .
   
  If m<3
    ProcedureReturn 0
  EndIf
   

  h2.f = h / 2.0
  NbSommet = 4*(m+1)+2
  NbTriangle = 4*m
  s = 0
  ;creation d'un mesh vide, un canal de texutre,
  *entity = DM_CreateMesh(NbTriangle, NbSommet, 1, #Null)
   
  ;Sommet en bas du cylindre
  Coul = $FF ; Pas utilisé dans cette démo
  For i = 0 To m
    theta.f =2*#PI*i/m
    ;les coordonnées de vertex
    DM_VertexCoords(*entity, s, Cos(theta), -h2, Sin(theta))
    ;les coordonnées de texture (canal 0)
    DM_VertexTexCoords(*entity, s, 0, Theta / (2.0*#PI), 0)
    s + 1
  Next i   
   
  ;Sommet en haut du cylindre
  For i = 0 To m
    theta.f =2*#PI*i/m
    ;les coordonnées de vertex
    DM_VertexCoords(*entity, s, Cos(theta), h2, Sin(theta))
    ;les coordonnées de texture (canal 0)
    DM_VertexTexCoords(*entity, s, 0, Theta / (2.0*#PI), 1)
    s + 1
  Next i
      
  ;Sommet face bas du cylindre
  For i = 0 To m
    theta.f =2*#PI*i/m
    ;les coordonnées de vertex
    DM_VertexCoords(*entity, s, Cos(theta), -h2, Sin(theta))
    ;les coordonnées de texture (canal 0)
    DM_VertexTexCoords(*entity, s, 0, Theta / (2.0*#PI), 1)
    s + 1       
  Next i
             
  ;Sommet face haut du cylindre
  For i = 0 To m
    theta.f =2*#PI*i/m
    ;les coordonnées de vertex
    DM_VertexCoords(*entity, s, Cos(theta), h2, Sin(theta))
    ;les coordonnées de texture (canal 0)
    DM_VertexTexCoords(*entity, s, 0, Theta / (2.0*#PI), 1)
    s + 1  
  Next i
   
  ;Centre bas
  ;les coordonnées de vertex
  DM_VertexCoords(*entity, s, 0, -h2, 0)
  ;les coordonnées de texture (canal 0)
  DM_VertexTexCoords(*entity, s, 0, 0.5, 0.5)
  s + 1  

  ;Centre haut
  ;les coordonnées de vertex
  DM_VertexCoords(*entity, s, 0, h2, 0)
  ;les coordonnées de texture (canal 0)
  DM_VertexTexCoords(*entity, s, 0, 0.5, 0.5)
  s + 1  
  
  t = 0
  ;les triangles
  For i=0 To m-1
    DM_VertexTriangle(*entity, t, i, i + 1, m + i + 2, 0)  
    t + 1  
    DM_VertexTriangle(*entity, t, i, m + i + 2,m + i + 1, 0) 
    t + 1
  Next i
   
  ;Face bas
  For i=0 To m-1
    DM_VertexTriangle(*entity, t, 4 * m + 4, 2 * m + 2 + i, 2 * m + 3 + i, 0)  
    t + 1
  Next i      
   
  ;Face Haut   
  For i=0 To m-1
    DM_VertexTriangle(*entity, t, 4 * m + 5, 3 * m + 3 + i, 3 * m + 4 + i, 0)  
    t + 1
  Next i

  ;on crée une petite Brush, dont on récupère le pointeur
  *brush = DM_CreateBrush("cylindre")
  ;modifie certains paramètres de la brush
  DM_BrushAmbient(*brush, 255,128,0,255)
  DM_BrushDiffuse(*brush, 255,128,0,255)
 
  ;--------------------------------------------------------
  ; TEXTURE 
  ;--------------------------------------------------------
  ;creation d'une texture vide de 256x256
  *texture = DM_CreateTexture(256,256)
  ;ré-oriente le buffer de sortie graphique vers notre texture
  DM_SetBuffer(*texture)
  ;debut d'un rendu
  DM_BeginScene()
    DM_ClsScreen (20, 0, 125, 0) ; efface le buffer avec une couleur
  ;fin rendu
  DM_EndScene()
  ;de nouveau le buffer vers l'ecran
  DM_SetBuffer(#Null)
 
  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)
  ; 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)
  ;Agrandi l'entity
  DM_ScaleEntity(*entity, 10, 25, 10)
EndProcedure  
 

Publié : dim. 15/oct./2006 8:25
par tmyke
Pour la def de la lumière, fait plutot cela, l'instruction
DM_LightColor() que tu met attenue déjà pas mal l'effet light
avec des paramètres (5,5,5)

Code : Tout sélectionner

;-Light
DM_AmbiantLight(15,  15,  15)
*light = DM_CreateLight(1, #Null)
DM_TurnEntity(*light, 90,0,0)
pour les paramètres de couleurs de la brush commence
comme cela

Code : Tout sélectionner

  ;on crée une petite Brush, dont on récupère le pointeur
  *brush = DM_CreateBrush("cylindre")
  ;modifie certains paramètres de la brush
  DM_BrushAmbient(*brush, 0,0,255,255)
  DM_BrushDiffuse(*brush, 0,0,255,255)
le canal 'alpha' est le drnier paramètre des fonction DM_Brush...()

De plus la texture que tu définis ne se voie pas trop ce
qui assombri le model, si tu supprime la ligne
DM_BrushTexture(*brush, *texture, 0), tu vois bien un
tube bleu avec éclairage..

:wink:

Publié : dim. 15/oct./2006 10:45
par comtois
Ok merci pour les infos.

Je vais passer au code suivant :)

[EDIT]
J'ai une petite question concernant le DM_UpdateNormal(*entity)

Comment sont calculées les normales ? moyenne des sommets ? pondérées par les angles ? on peut choisir sa méthode ? ou c'est directx qui fait le calcul ?