Bonjour,

J'essaie d'utiliser la lumière ambiante pour colorer des vertices.
Quoi que je fasse, soit le rendu est blanc, soit il est noir.
Il y a un autre message qui parle du même problème sur le forum, mais je n'arrive pas à en tirer d'information pour résoudre mon problème.

Je suis parti du programme d'exemple "Vertices" du SDK DirectX.
Dans l'init, je met toutes les couleurs du VertexBuffer à blanc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    CUSTOMVERTEX Vertices[] =
    {
        { 150.0f,  50.0f, 0.5f, 1.0f, 0xffffffff, }, // x, y, z, rhw, color
        { 250.0f, 250.0f, 0.5f, 1.0f, 0xffffffff, },
        {  50.0f, 250.0f, 0.5f, 1.0f, 0xffffffff, },
    };
Ensuite, j'active la prise en compte de la lumière:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
    g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
Puis j'initialise un light, un material et une couleur ambiante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
    g_pLight0.Type = D3DLIGHT_DIRECTIONAL;
    g_pLight0.Direction = D3DXVECTOR3( 1.0f, 0.0f, 1.0f );
 
    g_pLight0.Diffuse.r = 1.0f;
    g_pLight0.Diffuse.g = 1.0f;
    g_pLight0.Diffuse.b = 1.0f;
    g_pLight0.Diffuse.a = 1.0f;
 
    g_pLight0.Specular.r = 1.0f;
    g_pLight0.Specular.g = 1.0f;
    g_pLight0.Specular.b = 1.0f;
    g_pLight0.Specular.a = 1.0f;
 
    g_pd3dDevice->SetLight( 0, &g_pLight0 );
    g_pd3dDevice->LightEnable( 0, TRUE );
 
    ZeroMemory( &mtrl, sizeof(mtrl) );
    mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
    mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
    mtrl.Diffuse.b = mtrl.Ambient.b = 0.0f;
    mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;
 
    g_pd3dDevice->SetMaterial( &mtrl );
    g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xFFFF20FF );
et là, rien... Je reste désespérément avec un triangle blanc dans la fenêtre.

J'ai essayé en désactivant les COLORVERTEX, ou en mettant tous les xxxMATERIALSOURCE à D3DMCS_MATERIAL, parce que j'ai trouvé ça dans un tuto (dx9_materials sur un des sites donné dans un post du forum)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    g_pd3dDevice->SetRenderState( D3DRS_COLORVERTEX, FALSE );
...
        g_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );
        g_pd3dDevice->SetRenderState( D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL );
        g_pd3dDevice->SetRenderState( D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL );
        g_pd3dDevice->SetRenderState( D3DRS_EMISSIVEMATERIALSOURCE, D3DMCS_MATERIAL );
Mais rien n'y fait.
Qu'est-ce que j'ai oublié ?