【发布时间】:2021-01-19 11:45:48
【问题描述】:
我在处理中使用了一个简单的几何着色器:
shader(shader);
beginShape();
vertex(0.1, 0.1);
vertex(0.0, 0.0);
vertex(0.001, 0.02);
endShape();
所以我在三角形上应用着色器。
我们首先有一个什么都不做的简单顶点着色器。
in vec4 position;
void main() {
gl_Position = position;
}
然后我们有几何着色器,它应该为每个输入顶点返回一个顶点,所以总共 3 个顶点。
#version 150
layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
out FragData {
vec4 color;
} FragOut;
void main(){
for(int i=0; i<gl_in.length(); i++){
if(i%3==0){
FragOut.color = vec4(1., 0., 0., 1.);
}else if(i%3==1){
FragOut.color = vec4(0., 1., 0., 1.);
}else if(i%3==2){
FragOut.color = vec4(0., 0., 1., 1.);
}
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
最后我们有了一个什么都不做的简单片段着色器:
#version 150
in FragData {
vec4 color;
} FragIn;
out vec4 fragColor;
void main() {
fragColor = FragIn.color;
}
结果应该是一个三角形,每个顶点都有不同的颜色。但结果是四个三角形,我不知道为什么。
【问题讨论】:
-
结果不同,也是错误的。类似于我已经上传的图片,但还有两个三角形。这是回购:github.com/PauRosello97/Formorgel-Shaders
-
不,我刚改成 OpenFrameworks 就可以了
-
无论如何,我已经回答了这个问题。您所要做的就是在绘制几何图形之前调用
noStroke();。
标签: opengl glsl processing geometry-shader