我知道标准化坐标应该是-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。
由于
答案 0 :(得分:0)
在我看来,这似乎是对的。如果您的屏幕不是正方形,那么您确定要拉伸x轴,使其表现得像方形屏幕吗?因为如果你这样做,那么如果你告诉OpenGL绘制一个正方形,它将在屏幕上显示为一个矩形,而不是当你的屏幕宽度宽于你的x轴边缘大于你的y轴边缘时您的屏幕高度,如图像所示。这就是你将ratio
传递给投影的原因,因此它知道如何正确地绘制东西。
在屏幕上绘制正方形时会发生什么?它是正方形还是矩形?