1

由于堆栈溢出,我非常接近解决我一直遇到的许多问题。这个周末我又买了一份。

我有一个名为 GameObject2D 的对象,它基本上是一个带有一些纹理的正方形。以 3D 投影此对象时,一切正常。我使用一种名为 prepare3Ddrawing 的方法来执行此操作。然后我想做二维绘图,所以我有一个我正在使用一种方法来为二维绘图准备投影矩阵。我已经尝试了两种不同版本的 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...) 组合才能获得正确的结果。有任何想法吗?谢谢!

4

1 回答 1

1

GLU.gluOrtho2D(gl,0,getWidth(), 0, getHeight()) 具有参数 left、right、bottom、top。如果您想要“类似屏幕”的坐标,您需要将顶部设置为“0.0”,底部设置为“getHeight()”。此方法基本上用于设置您的坐标系。例如,如果您需要绘制一些图形,您希望 (0,0) 在中心,如果 (-1,0) 和顶部是 (0,1) 则在左侧,因此参数将是 (-1, 1,- 1, 1) 但是如果你想拥有像最常见的屏幕坐标系一样的东西,你会希望在左上角有 (0,0),在右下角有 (width, height) (0, width, height, 0) . 或者为了简单起见:只需在视图的左上角和右下角插入所需的坐标。

于 2012-11-26T07:06:17.043 回答