OpenGL几何着色器从点渲染三角形而不是正方形

gz5pxeao  于 2023-02-15  发布在  其他
关注(0)|答案(1)|浏览(187)

我试图从一个单一的点渲染一个正方形,这里是我的几何着色器代码:

#version 330 core
layout (points) in;
layout(triangle_strip, max_vertices=4) out;

void main(){
    vec4 pos=gl_in[0].gl_Position;
    gl_Position=pos+vec4(1,1,0,0);
    EmitVertex();
    gl_Position=pos+vec4(1,-1,0,0);
    EmitVertex();
    gl_Position=pos+vec4(-1,-1,0,0);
    EmitVertex();
    gl_Position=pos+vec4(-1,1,0,0);
    EmitVertex();
    EndPrimitive();
}

顶点着色器如下所示:

#version 330 core
layout (location=0) in vec3 position;

uniform mat4 view;
uniform mat4 projection;
uniform mat4 model;

void main(){
    gl_Position=projection*view*model*vec4(position,1.0);
}

它只渲染了一个三角形,我不知道为什么它只渲染了一个三角形。

3gtaxfhh

3gtaxfhh1#

顶点定义了一个三角形条带。每组3个相邻顶点形成一个三角形,缠绕顺序由第一个三角形的缠绕定义(后续三角形的顺序相反)。当启用face culling时,您需要关心缠绕顺序。正面的默认缠绕顺序是逆时针。因此,您必须交换第一个和第二个顶点:

void main(){
    vec4 pos=gl_in[0].gl_Position;
    gl_Position=pos+vec4( 1, -1, 0, 0);
    EmitVertex();
    gl_Position=pos+vec4( 1,  1, 0, 0);
    EmitVertex();
    gl_Position=pos+vec4(-1, -1, 0, 0);
    EmitVertex();
    gl_Position=pos+vec4(-1,  1, 0, 0);
    EmitVertex();
    EndPrimitive();
}

相关问题