法线贴图与普通坐标

时间:2010-07-10 00:45:15

标签: android opengl-es android-ndk

我目前正在使用OpenGL ES 1.1并使用DrawElements约定以及Vertex,Normal,Texture Coordinate和Index数组。

我最近在研究使用普通/凹凸贴图的想法时遇到过这种情况,我之前使用OpenGL ES是不可能的: http://iphone-3d-programming.labs.oreilly.com/ch08.html

我已经可以从我的3D建模器生成一个物体快速法线贴图,但是我不能完全清楚的是,如果为法线贴图实现第二个纹理单元,是否还需要法线坐标数组,或将照明+颜色纹理通过DOT3_RGB选项与法线贴图结合使用是否只需要它?

编辑 - 在进一步研究DOT3 Lighting之后,我不确定ognian给出的答案是否正确。这个页面http://www.3dkingdoms.com/tutorial.htm给出了它的用法示例,如果你看一下代码的“渲染和最终结果”部分,就没有普通数组的常规数组ClientState永远不会启用。

我也在这里发现了这篇文章What is DOT3 lighting?,它解释得很好......但引出了另一个问题。在评论中,它声明不是翻译法线,而是翻译光线方向。我对此感到困惑,好像我有一个固定墙壁的游戏......为什么我只为一个模型移动灯光?希望有人可以对所有这些做出很好的解释......

1 个答案:

答案 0 :(得分:1)

而切线空间法线贴图扰乱了从每顶点法线插值的法线,而对象空间法线贴图已经包含了有关地图中曲面方向的所有必需信息。因此,如果您只是在OpenGL ES 1.1中进行DOT3照明,则无需再次传递法线。

另一篇文章提到翻译光方向而不是法线的原因是因为点积(每像素法线和光矢量)的两个参数都需要在相同的坐标空间中才能使点积产生任何感。因为您有一个对象空间法线贴图,所以每像素法线始终位于对象的局部坐标空间中,并且纹理环境不提供任何应用进一步转换的方法。有可能你的光矢量在其他空间中,所以提到的变换是从另一个空间转换回对象的局部空间。