法向量的可视化
主要原理:先不使用几何着色器绘制一遍原模型,再利用几何着色器接受三角图元,再图片的每个顶点向法线方向发射一条射线,射线长度自定义。
因为几何着色器中顶点已经变换到了裁剪空间,为了适配,我们也需要要将法线变换到裁剪空间。
主要代码如下:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
layout(std140) uniform Matrix
{
mat4 projection;
mat4 view;
};
out v2g{
vec3 Normal;
} vs_out;
uniform mat4 model;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
mat3 normalMatrix = mat3(transpose(inverse(view * model)));
vs_out.Normal = normalize(vec3(projection * vec4(normalMatrix * aNormal, 1.0)));
}
#version 330 core
layout (triangles) in;
layout (line_strip,max_vertices=6) out;
in v2g{
vec3 Normal;
} vs_in[];
const float LENGTH=0.4;
void generateLine(int index){
g