0

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

像这样:

在此处输入图像描述

但是在应用这个之后:

从我的 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 传递到我的自定义类的 draw 方法中,在该方法中它被旋转和翻译)。

但是,我的坐标似乎发生了变化——大致是这样的:

在此处输入图像描述

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

Y 坐标保持不变。

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

谢谢

4

1 回答 1

0

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

当你在屏幕上画一个规则的正方形时会发生什么?它是正方形还是长方形?

于 2013-04-07T02:13:30.390 回答