2
我寫了一個非常簡單的穿透幾何着色器。我的輸入基元是點,輸出基元也是點。我也想通過幾何着色器將顏色和法線從頂點着色器轉發到片段着色器。着色器完美地編譯和鏈接,但最終的顏色非常奇怪。我認爲這個轉發有問題。任何人都可以指出問題嗎?這裏是我的着色器:具有普通和顏色的簡單穿透幾何着色器
頂點着色器:
#version 330 compatibility
struct vData
{
vec3 normal;
vec4 color;
};
out vData vertex;
void main()
{
vertex.normal = gl_NormalMatrix * gl_Normal;
vertex.color = gl_Color;
gl_Position = ftransform();
}
幾何着色器:
#version 330
layout (points) in;
layout (points) out;
layout (max_vertices = 1) out;
struct vData
{
vec3 normal;
vec4 color;
};
in vData vertices[];
out vData frag;
void main()
{
int i;
for(i = 0;i < gl_in.length();i++)
{
frag.normal = vertices[i].normal;
frag.color = vertices[i].color;
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
片段着色器:
#version 330
struct vData
{
vec3 normal;
vec4 color;
};
in vData frag;
void main()
{
gl_FragColor = frag.color;
}
停止在着色器階段之間通過結構。是的,我知道這是標準在技術上允許的。但沒有人使用它,所以它沒有經過IHV的良好測試。如果你需要分組輸入和輸出,[使用接口塊](http://www.opengl.org/wiki/Interface_Block_%28GLSL%29)。 – 2013-02-16 13:12:50
謝謝你的迴應!我應該遵循這一點! – 2013-02-18 04:30:50