所有事物的光线都是直接的

时间:2011-02-25 19:40:38

标签: c++ directx

当我转向灯光时。我可以看到我的物体,但没有3D灯 我将对象位置设置为0,0,10 这是我设置Light的代码

D3DLIGHT9 light;
  ZeroMemory( &light, sizeof(D3DLIGHT9) );
  light.Type       = D3DLIGHT_DIRECTIONAL;
  light.Diffuse.r  = 1.0f;
  light.Diffuse.g  = 1.0f;
  light.Diffuse.b  = 1.0f;
  light.Diffuse.a  = 1.0f;
  light.Range      = 1000.0f;

  // Create a direction for our light - it must be normalized  
  D3DXVECTOR3 vecDir;
  vecDir = D3DXVECTOR3(0.0f,10.0f,10);
  D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );

  // Tell the device about the light and turn it on
  d3ddev->SetLight( 0, &light );
  d3ddev->LightEnable( 0, TRUE );  

red thingies are normals

3 个答案:

答案 0 :(得分:0)

如果没有更完整的源列表,我们无法准确地告诉您问题是什么。话虽如此,我有个主意。

检查对象的法线。如果您的法线不正确,打开灯光可能会导致对象渲染为黑色,如果背景为黑色,可能会使其消失。

答案 1 :(得分:0)

有几件事需要检查。主要的是你是否将D3DRS_LIGHTING设置为TRUE。

要检查的另一件事是您的材料设置。将D3DRS_COLORVERTEX设置为TRUE。此外,如果您没有顶点颜色,则需要将D3DRS_DIFFUSEMATERIALSOURCE设置为D3DMSC_MATERIAL,并通过调用SetMaterial设置材质。

我总是发现D3D9上的照明管道真的很复杂。我强烈建议只使用着色器,因为不再使用固定功能。

答案 2 :(得分:0)

你是用着色器渲染的吗?如果是这样,固定功能照明将无法工作,您必须将自己的照明系统编码到用于渲染模型的着色器中。