我试图从一个单一的点渲染一个正方形,这里是我的几何着色器代码:
#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);
}
它只渲染了一个三角形,我不知道为什么它只渲染了一个三角形。
1条答案
按热度按时间3gtaxfhh1#
顶点定义了一个三角形条带。每组3个相邻顶点形成一个三角形,缠绕顺序由第一个三角形的缠绕定义(后续三角形的顺序相反)。当启用face culling时,您需要关心缠绕顺序。正面的默认缠绕顺序是逆时针。因此,您必须交换第一个和第二个顶点: