当我们使用光照时,是否必须使用法线进行地形渲染

时间:2013-05-07 07:27:45

标签: directx

虽然使用光照是必须使顶点启用法线,例如D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1

Becaue My Project适用于Normals而没有Normals只是黑色。但我朋友的工作没有法线:/为什么会这样?

1 个答案:

答案 0 :(得分:0)

可能你有不同的灯光模型。部分quoting from here

  

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

     

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

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

另一种可能性是你的朋友正在为地形使用纹理而根本不使用光照。您需要更密切地比较代码以查看差异,并在不清楚的情况下编辑您的帖子。

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

  • D3DRS_LIGHTING
  • D3DRS_COLORVERTEX
  • D3DRS_NORMALIZENORMALS

另外,请检查D3D设备上的以下呼叫:

  • SetMaterial
  • LightEnable
  • SetLight

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