[英]What is wrong with my normalized orthographic coordinates in openGL?
我正在尝试在openGL中创建一个三角形,该三角形在调整窗口大小时不会拉伸。 我将此正交矩阵传递给我的顶点着色器。
void resize(int w, int h) {
float orthMat[4][4];
orthMat[0][0] = 2.0/w;
orthMat[1][1] = -2.0/h;
orthMat[3][3] = 1.0;
orthMat[3][3] = 1.0;
orthMat[3][0] = -1.0;
orthMat[3][1] = -1.0;
orthMat[0][1] = 0.0;
orthMat[0][2] = 0.0;
orthMat[0][3] = 0.0;
orthMat[1][0] = 0.0;
orthMat[1][3] = 0.0;
orthMat[1][2] = 0.0;
orthMat[2][0] = 0.0;
orthMat[2][1] = 0.0;
orthMat[2][2] = 0.0;
orthMat[2][3] = 0.0;
orthMat[3][2] = 0.0;
glUniformMatrix4fv(uniformLocationIndex, 1, GL_TRUE, &orthMat[0][0]);
glViewport(0,0,w,h);
}
该uniformLocationIndex指向我的顶点着色器中的“ projMat”。
#version 330
in vec2 position;
in mat4 projMat;
void main() {
//vec4 contains normalized x and y coordinates
gl_Position = projMat * vec4(((-1.0) + position.x*(2.0/(2.0/projMat[0][0]))),
(1.0 - position.y*(2.0/(-2.0/projMat[1][1]))),
0.0, 1.0);
}
无论我将点放在哪里,它们都将移到中心,并且在调整窗口大小时无法正确缩放。 应该保持纵横比并缩小比例。
我做了一些数学运算,我认为问题是您的着色器计算。
我用以下方法创建了一个投影矩阵:
左裁剪平面= -1右裁剪平面= 1顶部裁剪平面= 1底部裁剪平面= -1近裁剪平面= 0.001远裁剪平面= 2
将我创建的矩阵与您的矩阵进行比较,第2行和第3行存在显着差异,但是由于您似乎没有使用它们,因此我忽略了这一点。
然后,我对您的gl_Position计算进行了数学运算,除非我弄错了,否则我会:
点(1,1)转换为(0,0)
点(1,-1)转换为(0,2)(视野之外)
点(-1,1)转换为(-2,0)(视野之外)
点(-1,-1)转换为(-2,2)(视野之外)
我认为您的矩阵中没有第2行和第3行(0和1看起来不错),但是由于您不使用它们,因此如果在着色器中输入类似以下内容,您应该可以通过:
vec4 Position = projMat * vec4(position, 0.0, 1.0);
gl_Position = vec4(Position.x, Position.y, 0.0, 1.0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.