1
我正在处理一个非常简单的程序,它将一个点数组传递给可编程管道以绘制一个立方体。我试图设置它,所以我可以改变每一帧的几何图形(基于某些外部输入),因此,对于照明,我需要在改变后重新计算面部法线。我正在做几何着色器作为练习。当它不应该改变GLSL几何值
我的着色如下:
顶点:
#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);
}
我试图计算法线(但我有pul因为调试的原因导出了这段代码),并且当我运行该程序时正常值出现了。 所以我把片段颜色设置为任何正常值。 (看看它是否确实是正常的。) 因此,无论出于何种原因,“正常”的价值无论在何种原因下都是在红色,绿色,白色和黑色之间翻转。 如果我只是在片段着色器中指定一个颜色矢量,那么该立方体在任何地方都会呈现该颜色。
为什么正常值的变化呢?
想法?
谢谢你的回答。它解决了我的问题。在我所有关于几何着色器的阅读中,我从来没有看到任何告诉过我的东西。尽管这是我自己的无能。谢谢。 – APalmer 2013-05-10 13:55:45