0

在使用光照时,必须启用法线的顶点,例如 D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1

因为我的项目适用于法线,而没有法线它只是黑色。但是我朋友的作品没有法线:/为什么会这样?

4

1 回答 1

0

可能您有不同的照明模型。从这里部分引用

Direct3D 光模型将光概括为两种类型:环境光和直射光。每个都有不同的属性,并且每个都以不同的方式与表面的材料相互作用。环境光是被散射的光,以至于它的方向和来源是不确定的:它在任何地方都保持低强度水平。摄影师使用的间接照明是环境光的一个很好的例子。Direct3D 中的环境光与自然界一样,没有真正的方向或来源,只有颜色和强度。事实上,环境光水平完全独立于场景中产生光的任何对象。环境光对镜面反射没有贡献。

直接光是由场景中的光源产生的光;它始终具有颜色和强度,并且沿指定方向行进。直射光与表面材料相互作用以创建镜面高光,其方向被用作着色算法(包括 Gouraud 着色)中的一个因素。当直射光被反射时,它不会影响场景中的环境光水平。场景中产生直射光的光源具有不同的特性,这些特性会影响它们照亮场景的方式。

您的朋友可能使用了更多的环境光,而您使用的是定向照明,因此您需要为几何体指定法线,以便照明模型可以计算正确的颜色。

另一种可能性是您的朋友正在为地形使用纹理,而根本没有使用照明。您需要更仔细地比较您的代码,看看有什么区别,如果有任何不清楚的地方,请编辑您的帖子。

编辑
两个项目之间的以下渲染状态可能不同,因此请仔细检查所有这些:

  • D3DRS_LIGHTING
  • D3DRS_COLORVERTEX
  • D3DRS_NORMALIZENORMALS

此外,检查 D3D 设备上的以下调用:

  • SetMaterial
  • LightEnable
  • SetLight

如果其中任何一个不同,您能否在原始问题中显示两组代码?

于 2013-05-07T07:37:40.547 回答