我发现"gl_NormalMatrix - 表示逆转置模型 - 视图矩阵的3x3矩阵".为什么法线矩阵必须是逆转置模型 - 视图矩阵?为什么我不能只为此目的使用模型视图矩阵?
Stu*_*etz 10
看到这里:
本节的灵感来自Eric Lengyel的"3D游戏编程和计算机图形学数学".
许多计算都是在眼睛空间完成的.这与通常在该空间中执行照明的事实有关,否则依赖于眼睛位置的效果,例如镜面光将更难实现.
因此,我们需要一种方法将法线转换为眼睛空间......
为什么我们不能用正常的向量做同样的事情?法线是3个浮点数的向量,模型视图矩阵是4×4.其次,由于法线是一个向量,我们只想转换它的方向.包含方向的模型视图矩阵的区域是左上3×3子矩阵.那么为什么不通过这个子矩阵乘以法线呢...
让我们来看看潜在的问题......
在上图中,模型视图矩阵应用于所有顶点以及法线,结果显然是错误的:法线不再垂直于曲面.
所以现在我们知道我们不能在所有情况下应用模型视图来转换法向量.那么问题是,我们应该应用什么矩阵?
考虑一个3×3矩阵G,让我们看看如何计算这个矩阵来正确转换法向量......
变换法线的正确矩阵是M矩阵的逆的转置.OpenGL在gl_NormalMatrix中为我们计算...