提问人:BackSpace7777777 提问时间:2/12/2023 最后编辑:Rabbid76BackSpace7777777 更新时间:2/12/2023 访问量:46
OpenGL Geometry Shader 渲染三角形而不是从点开始的正方形
OpenGL Geometry Shader rendering triangle instead of square from a point
问:
我正在尝试从单个点渲染一个正方形,这是我的几何着色器代码:
#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赞
Rabbid76
2/12/2023
#1
顶点定义三角形条带。每组 3 个相邻顶点形成一个三角形,缠绕顺序由第一个三角形的缠绕定义(连续三角形的顺序相反)。启用人脸剔除时,您需要关心缠绕顺序。正面的默认缠绕顺序是逆时针方向。因此,您必须交换第 1 个和第 2 个顶点:
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();
}
评论