光照 法线矩阵(Normal Matrix)

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了光照 法线矩阵(Normal Matrix)相关的知识,希望对你有一定的参考价值。

  1. 定义

模型矩阵左上角3x3部分的逆矩阵的转置矩阵。

注意,大部分的资源都会将法线矩阵定义为应用到模型-观察矩阵(Model-view Matrix)上的操作,但是由于我们只在世界空间中进行操作(不是在观察空间),我们只使用模型矩阵。

1.1 法向量如何转换为世界空间坐标?

对法向量实施缩放和旋转变换。

乘以一个模型矩阵?

Problem: 模型矩阵执行了不等比缩放,顶点的改变会导致法向量不再垂直于表面了

逆矩阵(Inverse Matrix)
转置矩阵(Transpose Matrix)

1.2

使用inverse和transpose函数自己生成这个法线矩阵,这两个函数对所有类型矩阵都有效
Normal = mat3(transpose(inverse(model))) * aNormal;

矩阵求逆对于着色器运算开销很大,因为它必须在场景中的每一个顶点上进行,应尽可能避免在着色器中进行求逆运算。先在CPU上计算出法线矩阵,再通过uniform把它传递给着色器(就像模型矩阵一样)。

以上是关于光照 法线矩阵(Normal Matrix)的主要内容,如果未能解决你的问题,请参考以下文章

光照 法线矩阵(Normal Matrix)

光照 法线矩阵(Normal Matrix)

着色器中的 OpenGL 法线变换

如何计算法线矩阵?

验证顶点着色器中变换矩阵的使用。正确性或法线变换

在顶点着色器中将法线转换为视图空间