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);
所以我到处都找遍了,找不到答案。当我在 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);