Android OpenGL ES 3D 立方体在横向模式下显示

Android OpenGL ES 3D cube is scewed when in landscape mode

所以我到处都找遍了,找不到答案。当我在 opengl es 中为 android 绘制一个 3d 立方体时,只要我处于纵向模式,它看起来就很好,但是当我切换到横向模式时,它看起来更像一个钻石。我假设问题出在比率上,但我真的不能说这是我用于比率的代码。

public void onSurfaceChanged(GL10 gl, int width, int height){
    gl.glViewport(0, 0, width, height);

    float ratio = (float) width/height;
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 11);
}

我认为可能是问题的另一个选项是立方体本身,但同样不确定,所以这里是顶点和索引。

private int vertices[] = {
        -one, -one, -one,
        one, -one, -one,
        one, one, -one,
        -one, one, -one,
        -one, -one, one,
        one, -one, one,
        one, one, one,
        -one, one, one
};

private byte indices[] = {
        0, 4, 5, 0, 5, 1,
        1, 5, 6, 1, 6, 2,
        2, 6, 7, 2, 7, 3,
        3, 7, 4, 3, 4, 0,
        4, 7, 6, 4, 6, 5,
        3, 0, 1, 3, 1, 2
};

好吧,我想我要在这里为所有需要的人回答我自己的问题。我在 onSurfaceChanged 方法下使用了这个比率代码。

    double w = width/4.5;
    gl.glViewport(0, (int)-w, width, width);

    float ratio = (float) width/width;
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 14);