我知道归一化坐标应该是-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传递到自定义类的绘图方法中,在该方法中对其进行旋转和转换)。
但是,我的协调似乎发生了变化--这大概是发生了什么:

如您所见,x坐标有所改变,-1和+1不再是屏幕的边缘(在我目前使用的设备上,外部边缘变为-1.7和+1.7)。
Y坐标保持不变。
如果有人能指出我哪里错了会很感激吗?我需要它是-1到+1,它应该是。
谢谢
发布于 2013-04-07 02:13:30
在我看来,这是正确的。如果你的屏幕不是正方形,那么你确定你希望你的x轴被拉伸,这样它的行为就像一个方形的屏幕吗?因为如果您这样做,那么如果您告诉OpenGL绘制一个正方形,它将显示为一个矩形在屏幕上,而不是如果您没有您的x轴边缘大于您的y轴边缘,当您的屏幕宽度大于您的屏幕高度,如图像所建议的。这就是为什么您将ratio传递给投影,因此它知道如何正确地绘制事物。
当你在屏幕上画一个正方形时会发生什么?它是正方形还是长方形?
https://stackoverflow.com/questions/15856146
复制相似问题