Android OpenGL Viewport在所有设备上都具有相同的视图,包括水平和垂直视图

时间:2013-07-09 19:55:11

标签: android opengl-es

我正在寻找设置OpenGL的正确方法,以便在任何方向的任何屏幕上显示相同的信息。我确实理解旋转时所有东西都会被压扁,但会出现相同的信息。有没有办法做到这一点?

为了更清晰,想象一下在屏幕中央有一个圆圈的风景平板电脑。当用户旋转平板电脑和高度因为宽度,反之亦然,而不是看到一个圆圈,他们将看到一个细长的椭圆形。

1 个答案:

答案 0 :(得分:0)

初始化OpenGL ES时,可以根据屏幕大小设置投影矩阵的比率。如果将其设置为1,它将修改投影矩阵,使图像在纵向和横向上采用相同大小的方式忽略屏幕比例。应该是你需要的东西。

示例:

// correct proportion according width to height ratio
public void onSurfaceChanged(GL10 glUnused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);
    float ratio = (float) width / height;
    Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 2.0f, 250);
} 

// disregard screen width/height ratio
public void onSurfaceChanged(GL10 glUnused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);
    Matrix.frustumM(mProjMatrix, 0, -1, 1, -1, 1, 2.0f, 250);
}