akalash47 | J'essaie de positionner correctement une lumière sous directX.
Il est bien dit dans la doc que (comme pour OpenGL) :
Light position is described using a D3DVECTOR structure in the Position member of the D3DLIGHT9 structure. The x-, y-, and z-coordinates are assumed to be in world space.
Donc normalement les 2 portions de code suivantes devraient être équivalentes :
Code :
- D3DXMATRIX matWorld;
- D3DXMatrixTranslation ( &matWorld, 0.0f, 5.0f, 0.0f );
- d3dDevice->SetTransform ( D3DTS_WORLD, &matWorld );
- D3DLIGHT9 d3dLight;
- d3dDevice->GetLight ( 0, &d3dLight );
- d3dLight.Position.x = 0;
- d3dLight.Position.y = 0;
- //etc...
- d3dDevice->SetLight ( 0, &d3dLight );
- d3dDevice->LightEnable ( 0, TRUE );
- D3DXMatrixTranslation ( &matWorld, 0.0f, -5.0f, 0.0f ); // on revient au repère local précédent
- d3dDevice->SetTransform ( D3DTS_WORLD, &matWorld );
|
ou alors :
Code :
- D3DLIGHT9 d3dLight;
- d3dDevice->GetLight ( 0, &d3dLight );
- d3dLight.Position.x = 0;
- d3dLight.Position.y = 5;
- //etc...
- d3dDevice->SetLight ( 0, &d3dLight );
- d3dDevice->LightEnable ( 0, TRUE );
|
Pourtant avec le premier exemple ma lampe reste positionnée en (0,0,0). Alors quelle transformation matricielle dois-je faire pour la déplacer ? |