Java 使用GLOrthof时,Android/OpenGL glRotatef没有透视图

Java 使用GLOrthof时,Android/OpenGL glRotatef没有透视图,java,android,opengl-es,android-canvas,Java,Android,Opengl Es,Android Canvas,我正在写一个基本上是2D的游戏,我需要的是有一个简单坐标的场景来模拟Android画布,所以0,0是左上角,w/h是右下角。到目前为止,我已经能够创建场景并绘制到它,一切正常,平移根据我的2D平面中的w/h坐标正确移动对象 问题是,现在我想使用X轴旋转来“翻转”纹理,我想在翻转时获得3D效果,如果我使用“rotatef”调用,则会发生翻转,但其平坦,因此根本没有透视,就像将高度缩放到零,因此没有距离感 我当前以以下方式创建视口: 这将创建所需的视口,左上角为0/0,右下角为w/h,填充屏幕。然

我正在写一个基本上是2D的游戏,我需要的是有一个简单坐标的场景来模拟Android画布,所以0,0是左上角,w/h是右下角。到目前为止,我已经能够创建场景并绘制到它,一切正常,平移根据我的2D平面中的w/h坐标正确移动对象

问题是,现在我想使用X轴旋转来“翻转”纹理,我想在翻转时获得3D效果,如果我使用“rotatef”调用,则会发生翻转,但其平坦,因此根本没有透视,就像将高度缩放到零,因此没有距离感

我当前以以下方式创建视口:

这将创建所需的视口,左上角为0/0,右下角为w/h,填充屏幕。然后我从位图加载纹理

gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
最后我画了纹理:

gl.glMatrixMode(GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
// Translate to starting position first in 0,0,w,h coordinates
gl.glTranslatef(mXOffset, mYOffset, 0f);
// Rotate 45 degrees on X axis
gl.glRotatef(45, 1.0f, 0.0f, 0.0f)
// Draw
gl.glEnableClientState(GL_VERTEX_ARRAY);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glVertexPointer(2, GL_FLOAT, 0, sVertexBuffer);
gl.glEnableClientState(GL_TEXTURE_COORD_ARRAY);
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
gl.glTexCoordPointer(2, GL_FLOAT, 0, mTextureBuffer);
gl.glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
gl.glDisableClientState(GL_VERTEX_ARRAY);
gl.glDisableClientState(GL_TEXTURE_COORD_ARRAY);
gl.glPopMatrix();
最后,我的顶点缓冲区是:

float vertices[] = {
        0f, 0f,  // 0, Top Left
        0f, 1f,  // 1, Bottom Left
        1f, 0f,  // 3, Top Right
        1f, 1f,  // 2, Bottom Right
};
float texturePoints[] = {
        0f, 0f,
        0f, v,
        u, 0,
        u, v,
};

这是由Ortho呼叫引起的吗?我曾尝试使用GLU获得类似的结果,但我无法复制这个简单的坐标系,我几乎无法绘制任何东西。

正交投影不会给你透视效果,因为它只是将顶点以直线投影到相机上。如果只能在翻转纹理时使用
GLU.gluthof
,则应使用
GLU.gluthof


然而,在理解中,问题是如何在没有Orthof的情况下获得相同的结果,因此,如何使用gluPerspective而不是Ortho使0,0,w,h覆盖全屏的类似视口?我尝试了很多组合,但都没有成功。
float vertices[] = {
        0f, 0f,  // 0, Top Left
        0f, 1f,  // 1, Bottom Left
        1f, 0f,  // 3, Top Right
        1f, 1f,  // 2, Bottom Right
};
float texturePoints[] = {
        0f, 0f,
        0f, v,
        u, 0,
        u, v,
};