如何保证切线空间矩阵正确

Posted hpugisers

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保证切线空间矩阵正确相关的知识,希望对你有一定的参考价值。

针对复杂模型时,切线往往是经过许多顶点计算的,这样就可以得到一个平均值来获得平滑的结果,这样会造成一个问题,那就是T、B、N三个向量可能不会相互垂直了,也就是TBN矩阵不是正交的了。
  针对这一问题,我们可以使用格拉姆施密特方法来重新正交化TBN矩阵,在顶点着色器中这么做:

vec3 T = normalize(vec3(model * vec4(aTangent, 0.0)));
vec3 N = normalize(vec3(model * vec4(aNormal, 0.0)));
// 使用N正交化T
T = normalize(T - dot(T, N) * N);
// 叉乘得B
vec3 B = cross(N, T);

mat3 TBN = mat3(T, B, N)  

原文链接:https://www.jianshu.com/p/d9c6441585f4

以上是关于如何保证切线空间矩阵正确的主要内容,如果未能解决你的问题,请参考以下文章

[Unity Shader] 切线空间的法线贴图

使用具有世界空间法线的切线空间法线贴图

计算 3D 切线空间

Tangent space(切线空间)

切线与切平面

切线空间法线贴图 - 着色器完整性检查