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
Ensuite, j'active la prise en compte de la lumière:
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, }, };
Puis j'initialise un light, un material et une couleur ambiante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
et là, rien... Je reste désespérément avec un triangle blanc dans la fenêtre.
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 );
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)
Mais rien n'y fait.
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 );
Qu'est-ce que j'ai oublié ?
Partager