Opengl 几何体着色器在处理过程中的意外行为

Opengl 几何体着色器在处理过程中的意外行为,opengl,glsl,processing,geometry-shader,Opengl,Glsl,Processing,Geometry Shader,我在处理中使用了一个简单的几何体着色器: 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; } 然后我们有一个几何体着色器,

我在处理中使用了一个简单的几何体着色器:

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();
}
结果应该是一个三角形,每个顶点具有不同的颜色。但结果是四个三角形,我不知道为什么


如果你做
beginShape(三角形)会发生什么而不是
beginShape()?结果不同,但也有错误。与我已经上传的图片相似,但还有两个三角形。以下是回购协议:
#version 150

in FragData {
  vec4 color;
} FragIn;

out vec4 fragColor;

void main() {
  fragColor = FragIn.color;
}