当我尝试使用我的正交投影时,我没有得到我正在寻找的结果。我有一个 VBO,其中包含以下 2D 顶点和 texcoords(每隔一行):
0, 0,
0.0, 0.0,
512, 0,
1.0, 0.0,
512, 512,
1.0, 1.0,
0, 512,
0.0, 1.0
目前,我使用glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
VBO 似乎没有任何问题(我在 gDEBugger 中检查过)来绘制它们,而问题似乎在于顶点着色器。
这是有问题的着色器:
#version 420
uniform mat4 projection;
uniform mat4 modelview;
layout(location = 0) in vec2 vertex;
layout(location = 1) in vec2 texcoord;
out vec2 f_texcoord;
void main() {
const float right = 800.0;
const float bottom = 600.0;
const float left = 0.0;
const float top = 0.0;
const float far = 1.0;
const float near = -1.0;
mat4 testmat = mat4(
vec4(2.0 / (right - left), 0, 0, -(right + left) / (right - left)),
vec4(0, 2.0 / (top - bottom), 0, -(top + bottom) / (top - bottom)),
vec4(0, 0, -2.0 / (far - near), -(far + near) / (far - near)),
vec4(0, 0, 0, 1)
);
gl_Position = testmat * vec4(vertex, 0.0, 1.0);
f_texcoord = texcoord;
}
我对变换矩阵并不太熟悉,所以我现在正在学习,如果我想要正交投影,从我读到的上面的矩阵是正确的,这让我很困惑,因为我无法让它工作。
这是一个说明问题的图像:(请注意,纹理具有透明部分。)
编辑: 这是修改后的值: