1

我正在尝试从 6 个点生成一个立方体(每个点代表一个边,然后是 2 个额外的值来说明它是否旋转到面对 x 或 y 轴,z 轴不需要一个,因为默认情况下它是这样的) . 当我尝试将 gl_Position 值乘以 mat4 旋转矩阵以使立方体的侧面正确旋转时,问题就出现了。它甚至没有出现故障,它根本不显示面部(当我没有矩阵乘以值时它会显示)。

这是我的几何着色器:

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

in vec3 gFacePos[];

out vec2 texCoord;

mat4 xtrans = mat4( //rotate on the x axis
1.0, 0.0, 0.0, 0.0,
0.0, 0.0, -1.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0
);

mat4 ytrans = mat4( //rotate on y
0.0, 0.0, 1.0, 0.0,
0.0, 1.0, 0.0, 0.0,
-1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0
);

mat4 rtrans = (gFacePos[0].x * xtrans) + (gFacePos[0].y * ytrans); //figure out what the current point wants to rotate on

void main() { //this whole thing makes a square at the requested point
    gl_Position = gl_in[0].gl_Position + vec4(-0.5, 0.5, 0.0, 0.0);
    gl_Position *= rtrans; //these break it
    texCoord = vec2(0.0, 0.0);
    EmitVertex();
    gl_Position = gl_in[0].gl_Position + vec4(0.5, 0.5, 0.0, 0.0);
    gl_Position *= rtrans;
    texCoord = vec2(1.0, 0.0);
    EmitVertex();
    gl_Position = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
    gl_Position *= rtrans;
    texCoord = vec2(0.0, 1.0);
    EmitVertex();
    gl_Position = gl_in[0].gl_Position + vec4(0.5, -0.5, 0.0, 0.0);
    gl_Position *= rtrans;
    texCoord = vec2(1.0, 1.0);
    EmitVertex();
    EndPrimitive();
}

片段和顶点是非常标准的(顶点上有一些基本的相机东西)。

4

0 回答 0