如果我具有以下屏幕设置
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
参数即可显示场景的特定部分。