OpenGL无法按预期呈现

时间:2014-05-16 21:47:56

标签: java android opengl-es

如果我使用以下

进行屏幕设置
    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)

1 个答案:

答案 0 :(得分:0)

glOrthof用于创建屏幕坐标系,因为它的输入参数是左,右,上,下我无法理解混淆的位置。如果您希望左上角是(0,0)点,那么只需将顶部和左侧参数设置为零,将底部和右侧参数设置为某些正值,使得正X向右,正Y向下。

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

  • 查看坐标系,将(0,0)作为左上角插入,将(screenHeight , screenWidth)作为右下角插入。在很多情况下,左下角位于(0,0)
  • 屏幕中心位于(0,0),然后左上角位于(1,-1),右下角位于(-1,1)
  • 的坐标系图形
  • 标准化视图系统,其屏幕中心位于(0,0),但高度与宽度有关,具体取决于屏幕比例。左上角位于(-1,-(screenHeight/screenWidth)),右下角位于(1, screenHeight/screenWidth)

您应该注意,仅在第1和第3种情况下,您的方块将始终绘制为正方形而不是矩形(a/b = screenWidth/screenHeight)。因此,选择最适合您应用的产品。

您应该知道glOrthof对于平移和缩放也非常有用。您可以简单地更改glOrthof参数,以便显示场景的某个部分,而不是进行一些奇怪的翻译和缩放。