应用正交投影或平截头体影响标准化坐标?

时间:2013-04-06 21:21:11

标签: android opengl-es-2.0 coordinates coordinate-systems orthographic

我知道标准化坐标应该是-1(左)和+1(右)和-1(底部)和+1(顶部)

像这样:

enter image description here

但在应用之后:

来自我的onSurfaceChanged方法

GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);

//The above line can be replaced with:
//Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
//But I get the same results with either frustumM or otrhoM

这是我的onDrawFrame方法

Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

(然后我将mMVPMatrix传递给我的自定义类的绘制方法,旋转和翻译它。)

但是,我的坐标似乎发生了变化 - 这大致是发生的事情:

enter image description here

正如你所看到的,x坐标有所改变,-1和+1不再是屏幕的边缘(在我正在使用的设备上,外边缘变为-1.7和+ 1.7)

Y坐标保持不变。

如果有人能指出我哪里出错了,我会很感激吗?我需要它应该是-1到+1。

由于

1 个答案:

答案 0 :(得分:0)

在我看来,这似乎是对的。如果您的屏幕不是正方形,那么您确定要拉伸x轴,使其表现得像方形屏幕吗?因为如果你这样做,那么如果你告诉OpenGL绘制一个正方形,它将在屏幕上显示为一个矩形,而不是当你的屏幕宽度宽于你的x轴边缘大于你的y轴边缘时您的屏幕高度,如图像所示。这就是你将ratio传递给投影的原因,因此它知道如何正确地绘制东西。

在屏幕上绘制正方形时会发生什么?它是正方形还是矩形?