繁体   English   中英

openGL中的规范化正交坐标有什么问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM