android - 法线贴图与法线坐标

标签 android opengl-es android-ndk

我目前正在使用 OpenGL ES 1.1 并使用 DrawElements 约定以及顶点、法线、纹理坐标和索引数组。

我最近在研究使用法线/凹凸贴图的想法时遇到了这个问题,虽然我以前用 OpenGL ES 是不可能的: http://iphone-3d-programming.labs.oreilly.com/ch08.html

我已经可以从我的 3D 建模器生成对象空间法线贴图,但我不完全清楚的是,如果为法线贴图实现第二个纹理单元,是否需要法线坐标数组,还是只需要通过 DOT3_RGB 选项将光照 + 颜色纹理与法线贴图相结合?

编辑 - 在进一步研究 DOT3 Lighting 之后,我不确定 ognian 给出的答案是否正确。本页,http://www.3dkingdoms.com/tutorial.htm给出了它的用法示例,如果您查看代码的“渲染和最终结果”部分,没有普通数组 ClientState for Normal Arrays is never enabled。

我在这里也找到了这篇文章,What is DOT3 lighting?这很好地解释了......但让我想到了另一个问题。在评论中,它声明您不是平移法线,而是平移光的方向。我对此感到困惑,就好像我有一个固定墙的游戏......为什么我要为一个模型移动灯光?希望有人能对这一切给出一个很好的解释......

最佳答案

虽然切线空间法线贴图扰乱了从每个顶点法线插值的法线,但对象空间法线贴图已经包含了所有需要的关于贴图表面方向的信息。因此,如果您只是在 OpenGL ES 1.1 中进行 DOT3 照明,则不需要再次通过法线。

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

关于android - 法线贴图与法线坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217343/

相关文章:

android - 如何使用Android ndk在GLSurface View 上显示多张图片

android - 共享库依赖是如何解决的?

android - 无法进行渲染(android、SurfaceView、ndk、ANativeWindow)

android - 拉动刷新recyclerview android

SD卡中的android SQLite数据库

javascript - 如何使用 React Native 使工具栏位于默认键盘上方?

java - Google Play 商店接受自签名证书应用吗?

android - 使用 OpenGL 将位图绘制到 VideoFrame

glTexImage2D 的 android 位图像素格式

android - Android NDK 路径中的反斜杠使 QT 应用程序无法部署