【发布时间】:2021-01-12 18:18:00
【问题描述】:
我正在尝试使用几何着色器生成一个简单的形状,但该形状会渲染两次,我不知道为什么。
首先我们有一个非常简单的顶点着色器
#version 150
in vec4 position;
void main() {
gl_Position = position;
}
然后是生成简单三角形的几何着色器。
#version 150
layout (triangles) in;
layout (triangle_strip, max_vertices = 5) out;
out FragData {
vec4 color;
} FragOut;
void main(){
//RED TOP LEFT
FragOut.color = vec4(1.0, 0.0, 0.0, 1.0);
gl_Position = gl_in[0].gl_Position + vec4( -1.0, 0.0, 0.0, 0.0);
EmitVertex();
//BLUE BOTTOM LEFT
FragOut.color = vec4(0., 0., 1., 1.);
gl_Position = gl_in[0].gl_Position + vec4( -1.0, -1.0, 0.0, 0.0);
EmitVertex();
//GREEN BOTTOM RIGHT
FragOut.color = vec4(0.0, 1.0, 0.0, 1.0);
gl_Position = gl_in[0].gl_Position + vec4( 1.0, -1.0, 0.0, 0.0);
EmitVertex();
EndPrimitive();
}
最后是一个简单的片段着色器
#version 150
in FragData {
vec4 color;
} FragIn;
out vec4 fragColor;
void main() {
fragColor = FragIn.color;
}
结果应该是一个三角形,但正在渲染两个三角形:
【问题讨论】:
-
几何着色器对每个图元执行一次。你画了多少个图元? 2?
-
老实说,我不确定。我在处理矩形上使用着色器。这是完整代码:github.com/PauRosello97/Formorgel-Shaders。谢谢。
-
rect(0, 0, width, height);这是画一个矩形吗?如果是这样,您正在绘制两个三角形。并且您使用第一个顶点位置计算所有坐标。所以一切正常。
标签: opengl glsl processing geometry-shader