前期文章:
- Android OpenGL 入门详解(1.OpenGL是什么?)
- Android OpenGL 入门之路(2.Android GLSurfaceView详解)
- Android OpenGL 入门详解(3.OpenGL基本流程)
- Android OpenGL 入门详解(4.OpenGL ES着色器语言)
这篇文章主要说明OpenGL里面视口和坐标相关的知识,
Viewport 视口坐标系
设置了MyRender,并实现内部的三个函数
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
在onSurfaceChanged中,我们调用了glViewport方法,Viewport为视口,其函数如下:
glViewport(x, y, width, height);
在渲染之前,我们必须告诉OpenGL渲染窗口的尺寸大小,即OpenGL应该把渲染之后的图形绘制在窗口的哪个部位。
参数x,y指定了视见区域的宽度和高度,即窗口左下角的位置。width,height,参数控制渲染窗口的宽度和高度(像素)。
视口坐标系是标准的笛卡尔直角坐标系,如下图:如果我们设置x,y为0,0,宽度和高度为屏幕的坐标,那么显示的就是GLSurview所在的全部区域。
如果我们改变x = 50, y = 100那么就会如下所示。
Window 窗口坐标系
视口坐标系和窗口坐标系是不同的,窗口坐标系的0,0位置是位于左上角的,对比如下图1:窗口坐标和 图2: 视口坐标
图1:窗口坐标
视口坐标
在android,我们操作点击位置的坐标系为窗口坐标系,要和OpenGL显示的视口坐标系区分开。
OpenGL 程序坐标
以上说的都是实际的屏幕的物理坐标,在代码处理中,无论是x坐标还是y坐标,OpenGL都会把屏幕映射到[-1,1]的范围内。这意味着屏幕的坐标对应x轴的-1,屏幕的右边对应+1,屏幕的底边对应y轴的-1,屏幕的顶边对应+1。如下图显示:
因此,不管屏幕是什么形状和大小,始终都会映射到[-1,1]之间,实际在编写相应代码中,顶点位置的坐标也始终在[-1,1]之间。