GLU.gluOrtho2D翻转我的纹理

时间:2012-11-25 14:36:46

标签: android opengl-es

由于堆栈溢出,我非常接近找出我遇到的很多问题。这个周末我还有一个。

我有一个名为GameObject2D的对象,它基本上是一个带有一些纹理的正方形。在3D中投影此对象时,一切正常。我使用一个名为prepare3Ddrawing的方法来执行此操作。然后我想做2D绘图,所以我有一个方法来为2d绘图准备投影矩阵。我已经尝试了两个不同版本的prepare2Ddrawing,并且无法缝合以使其工作。首先是我的3d准备......

private void prepare3Ddrawing(GL10 gl)
    {   
        gl.glLoadIdentity();
        gl.glViewport(0, 0, getWidth(), getHeight());
        gl.glDisable(GL10.GL_DITHER);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 45.0f, (float)getWidth()/(float)getHeight(),0.1f,100.0f);    
    }

这是我的2D版本,它将原点放在左下角而不是左上角......

private void prepare2Ddrawing(GL10 gl)
    {   
        gl.glDisable(GL10.GL_DEPTH_TEST);
        gl.glLoadIdentity();
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight());
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

我相信我需要GLU.gluOrtho2D(gl ...)的正确组合才能获得正确的结果。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

GLU.gluOrtho2D(gl,0,getWidth(),0,getHeight())的参数是left,right,bottom,top。如果你想要“屏幕式”坐标,你需要将顶部设置为“0.0”并将底部设置为“getHeight()”。此方法主要用于设置坐标系。例如,如果你需要绘制一些图形,你需要(0,0)在中心,左边是if(-1,0),top是(0,1)所以参数是(-1,1, - 1,1)但是如果你想拥有最常见的屏幕坐标系,你会想要在左上角有(0,0),在右下角有(0,宽,高,0) 。或者为了简单起见:只需在视图的左上角和右下角插入所需的坐标。