这与另一个问题中描述的问题有关(那里有图片):
Opengl 着色器问题 - 奇怪的光反射伪像
我有一个 .obj 导入器,它创建数据结构并计算切线和双切线。这是我的对象中第一个三角形的数据:
我对切线空间的理解是,法线从顶点向外指向,切线垂直(正交?)于法线向量并指向纹理中正S的方向,双切线垂直于两者。我不确定你怎么称呼它,但我认为这 3 个向量形成了看起来像旋转或变换的 x、y、z 轴。他们不会是3randomly定向向量,对吧?
还有我的理解:法线贴图中的法线提供了一个新的法线向量。但在切线空间纹理贴图中,RGB 编码法线和每个顶点法线之间没有内置方向。因此,您可以使用 TBN 矩阵来弥合间隙,并使它们处于同一空间(或在正确的空间中获得照明)。
但后来我看到了对象数据...我的结构有 270 个顶点,所有顶点的切线 Y 均为 0。这对于切线数据正确吗?这些切线是否像顶点法线空间之类的?或者他们只是看起来完全错误?或者我对它是如何工作的以及我的数据是否正确感到困惑?
为了更接近解决另一个问题中的问题,我需要确保我的数据是正确的以及我对切线空间照明数学如何工作的理解。
切线和双切线向量指向纹理坐标的 S 和 T 分量的方向(对于不熟悉 OpenGL 术语的人来说是 U 和 V)。所以切向量沿着 S 点,双切点沿着 T 点。
所以是的,这些不have与法线正交或彼此。它们遵循纹理映射的方向。事实上,这就是它们的目的:允许您将法线从模型空间转换到纹理空间。它们定义了从模型空间到纹理空间的映射。
仅当该顶点处的 S 和 T 分量正交时,切线和双切线才会彼此正交。也就是说,如果纹理映射没有剪切。虽然大多数纹理映射算法会尝试最小化剪切,但它们可能无法在所有情况下消除剪切。在这些情况下,精确的矩阵将包括剪切位置处的非正交切线和双切线。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)