如果我具有以下屏幕设置

    gl.glViewport(0,0,width,height);  //Reset the current viewport
    gl.glMatrixMode(GL10.GL_PROJECTION); //select the projection matrix
    gl.glLoadIdentity();            //Reset the Projection Matrix

    gl.glOrthof(0f,1f,0f,1f,-1f,1f);


顶点设置如下

this._vertices=new float[]{
                0.0f,0.5f,0.0f,   //V1 bottom left
                0.0f,1.0f,0.0f,    //V2 top left
                0.5f,0.5f,0.0f,  //V3 Bottom right
                0.5f,1.0f,0.0f   //V4 top right
        };


然后当我做

gl.glTranslatef(0.0f,0.0f,0.0f);


它将正方形放在左上角(我以为0,0是左下角?)

接着

gl.glTranslatef(0.5f,-0.5f,0.0f);


将正方形放在屏幕中间(建议底部实际上是-1.0f而不是0.0f)

如何使屏幕的左下角从0,0开始?

更新-

我发现如果我换线

gl.glOrthof(0f,1f,0f,1f,-1f,1f);




gl.glOrthof(0f,1f,1f,0f,-1f,1f);


那么什么都不会改变(即左上角仍为0,0,左下角为0,-1)

但是,如果我将线条完全留出,则原点位于屏幕的中央(即左上角为-1,-1)

最佳答案

glOrthof用于创建屏幕坐标系,因为它的输入参数分别为left,right,top和bottom,所以我无法理解混乱之处。如果您希望左上角是(0,0)点,则只需将top和left参数设置为零,将bottom和right设置为一些正值,以使正X向右,正Y向下。

使用glOrthof的一些非常常见的情况是:


查看坐标系,在其中插入(0,0)作为左上角,而(screenHeight , screenWidth)作为右下角。在很多情况下,左下角位于(0,0)
像坐标系的图形,其中屏幕中心在(0,0),然后左上角在(1,-1),右下角在(-1,1)
归一化视图系统,其屏幕中心位于(0,0),但是高度取决于宽度,取决于屏幕比例。因此,左上角在(-1,-(screenHeight/screenWidth)),右下角在(1, screenHeight/screenWidth)


您应注意,只有在第一种和第三种情况下,您的正方形才会始终绘制为正方形而不是矩形(其中a/b = screenWidth/screenHeight)。因此,选择最适合您的应用程序。

您应该知道glOrthof在平移和缩放中也非常有用。无需进行一些奇怪的转换和缩放,您只需更改glOrthof参数即可显示场景的特定部分。

10-08 18:06