如何在GLSL上正确计算TBN矩阵

时间:2017-11-07 02:08:14

标签: c++ matrix glsl vertex-shader

我使用GLSL进行常规映射用于我的应用(成像声纳仿真),并且通过计算着色器上的TBN矩阵我遇到了问题。与图像中心相比,法线向量在边界上的分辨率较低。

跟随我的顶点代码:

#version 130

out vec3 pos;
out vec3 normal;
out mat3 TBN;

void main() {
    pos = (gl_ModelViewMatrix * gl_Vertex).xyz;
    normal = gl_NormalMatrix * gl_Normal.xyz;

    vec3 n = normalize(normal);             
    vec3 t = normalize(cross(normal, vec3(-1,0,0)));
    vec3 b = cross(t, n) + cross(n, t);     
    TBN = transpose(mat3(t,b,n));

    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

我的片段代码的一部分:

#version 130
in vec3 pos;
in vec3 normal;
in mat3 TBN;
uniform sampler2D normalTexture;

void main() {
    vec3 newNormal = (texture2D(normalTexture, gl_TexCoord[0].st).rgb * 2.0 - 1) * TBN;
    newNormal = normalize(newNormal);
...
}

这是结果图: enter image description here

如何计算TBN矩阵以正确计算法线贴图?

提前致谢,

0 个答案:

没有答案