GLSL几何值不应该改变

时间:2013-05-10 01:05:26

标签: opengl glsl geometry-shader

我正在使用一个非常简单的程序,它将一系列点传递到可编程的pipline中以绘制一个立方体。我正在尝试设置它以便我可以每帧更改几何体(基于一些外部输入),因此,对于光照,我需要在更改后重新计算面法线。我在几何着色器中做它作为练习。

我的着色器如下:

顶点:

#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);
}

我正在尝试计算法线(但出于调试原因,我已经取出了代码),当我运行程序时,正常值就吓坏了。 所以我将片段颜色设置为正常值。 (看看它是否确实正常。) 所以无论出于何种原因,“正常”的价值在红色,绿色,白色和黑色之间翻转,我无从谈论。 如果我只是在片段着色器中指定一个颜色矢量,那么立方体就可以在任何地方呈现这种颜色。

为什么正常值会发生变化?

思想?

1 个答案:

答案 0 :(得分:4)

normal的值未定义

每次调用EmitVertex之前,您必须写入几何着色器输出的所有。 GS不像立即模式渲染那样工作。