在各种示例中,着色器代码包含不同的uniform具有以下变换矩阵的代码:(mat4 projMatrix投影矩阵)、mat4 viewMatrix(相机变换矩阵)、mat4 modelMatrix(模型变换矩阵)和某种法线矩阵:mat4 normalMatrix. 这是什么意思,我在哪里可以得到它?
在各种示例中,着色器代码包含不同的uniform具有以下变换矩阵的代码:(mat4 projMatrix投影矩阵)、mat4 viewMatrix(相机变换矩阵)、mat4 modelMatrix(模型变换矩阵)和某种法线矩阵:mat4 normalMatrix. 这是什么意思,我在哪里可以得到它?
如何找到它?
法线变换矩阵指的是单个对象,很容易从模型变换矩阵中计算出来:
但是,在 GPU 中进行这样的计算是不必要的昂贵,也就是多次,所以通常这个矩阵在主代码中只计算一次,然后通过
uniform.为什么需要她?
事实是模型的变换矩阵有时被错误地用于其法线。让我们看看这种情况:有一个三角形,其中有向量T和它的法线N:
垂直缩放时,法线失去与三角形边的垂直性:
换句话说,如果矩阵是正交的(即等于自身的逆和转置版本),那么旋转和平移等变换不会改变这个属性。但这不适用于在所有轴上不相等的缩放。这就是为什么如果您使用这种缩放,或者您的代码是为其他人设计的,那么您应该使用模型变换矩阵的逆矩阵的转置。
有用的链接
关于 enSO 的类似问题
相关文章(英文)
normalMatrix 和 modelMatrix 是一样的吗?(GameDev StackExchange)