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

    科技2025-10-05  13

    针对复杂模型时,切线往往是经过许多顶点计算的,这样就可以得到一个平均值来获得平滑的结果,这样会造成一个问题,那就是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

    Processed: 0.008, SQL: 8