我正在使用一个非常简单的程序,它将一组点传递到可编程管道中以绘制一个立方体。我正在尝试对其进行设置,以便我可以每帧更改几何图形(基于一些外部输入),因此,对于照明,我需要在更改面部法线后重新计算它们。我在几何着色器中做它作为练习。
我的着色器如下:
顶点:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main(){
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
}
几何学:
#version 330
precision highp float;
layout (triangles) in;
layout (triangle_strip) out;
layout (max_vertices = 3) out;
out vec3 normal;
void main(void)
{
for (int i = 0; i < gl_in.length(); i++) {
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
normal = vec3(0,0,1);
}
分段:
#version 330
in vec3 normal;
out vec4 color;
void main()
{
color = vec4(normal,1);
}
我试图计算法线(但出于调试原因,我已经提取了该代码)并且当我运行程序时,正常值被吓坏了。所以我将片段颜色设置为正常值。(看看它是否确实是正常的。)所以无论出于何种原因,“正常”的值在红色、绿色、白色和黑色之间翻转,我无法分辨。如果我只是在片段着色器中指定一个颜色向量,那么立方体在任何地方都可以使用该颜色进行渲染。
为什么正常值会发生变化?
想法?