Directx 当我们使用照明时,地形渲染必须有法线吗

Directx 当我们使用照明时,地形渲染必须有法线吗,directx,Directx,使用照明时,必须启用法线顶点,例如D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 因为我的项目使用法线,而没有法线,它只是黑色的。但是我朋友没有法线的作品:/为什么呢?可能你有不同的照明模型。部分: Direct3D灯光模型将灯光概括为两种类型:环境光和直接光。每个都有不同的属性,并且每个属性都以不同的方式与曲面的材质交互。环境光是一种散射过多的光,其方向和光源不确定:它在任何地方都保持较低的强度。摄影师使用的间接照明是环境光的一个很好的例子。Direct3D中

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


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

可能你有不同的照明模型。部分:

Direct3D灯光模型将灯光概括为两种类型:环境光和直接光。每个都有不同的属性,并且每个属性都以不同的方式与曲面的材质交互。环境光是一种散射过多的光,其方向和光源不确定:它在任何地方都保持较低的强度。摄影师使用的间接照明是环境光的一个很好的例子。Direct3D中的环境光与自然界一样,没有真实的方向或光源,只有颜色和强度。事实上,环境光级别完全独立于场景中生成灯光的任何对象。环境光不会导致镜面反射

直射光是由场景中的光源产生的光;它始终具有颜色和强度,并沿指定方向移动。直射光与曲面的材质交互以创建镜面反射高光,其方向用作着色算法(包括Gouraud着色)中的一个因子。反射直射光时,它不会对场景中的环境光级别产生影响。场景中生成直射光的光源具有不同的特性,这些特性会影响光源照亮场景的方式

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

另一种可能是,您的朋友正在为地形使用纹理,而根本不使用照明。你需要更仔细地比较你的代码,看看有什么不同,如果有什么不清楚的地方,就编辑你的文章

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

  • D3DRS_照明
  • D3DRS_颜色顶点
  • D3DRS_标准化异常
此外,在D3D设备上检查以下调用:

  • SetMaterial
  • lightable
  • SetLight

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

不,我们都做了相同的事情,我必须自定义有法线和没有法线的顶点,他只有一个自定义顶点没有法线,但我的顶点可以处理法线,而没有法线的顶点刚刚熄灭。是的,我们没有设置环境光。“我们都有直射光:有没有可能?@Dilangeeth-他的自定义顶点有颜色定义吗?”?还要比较渲染状态-照明是否相同?颜色模式相同?是的,一切都一样,我的意思是顶点格式是D3DFVF_XYZ | D3DFVF_TEX1,我们没有使用颜色,你是说漫反射,对吗?我们没有使用它,一切都是一样的。代码非常大,我不能在这里上传所有的东西,比如Light类、Terrain类和更多继承类。我只是想知道是否可以使用D3DFVF_XYZ | D3DFVF_TEX1在自定义顶点的地形上渲染直射光,如果可以,如何渲染?因为我的朋友让它工作了。@Dihangeth-如果一切都一样,那么你必须得到同样的结果,但你没有。因此,有些东西是不同的,我只是想通过指出可能的地方来帮助你找到它。如果您的代码太大,无法上传,那么我就没有更多的建议了-对不起。
D3DFVF
?这东西在D3D8之后不是过时了吗?我知道它就在那里。但它不再是必要的,因为还有其他更通用的方法来指定顶点格式。它用于固定functino管道,自DX8以来就不再相关