由于本人懒的绘图,尽可能的用语言进行描述。
1、什么是OpenGL ES?和 OpenGL 是什么关系?
OpenGL ES是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计的,去除了许多不必要和性能较低的API接口。这里也提下EGL, EGL 是链接OpenGL 与 设备窗口的 管理器,属于跨平台的设计。
2、坐标
在绘图的时候,总会有纹理渲染问题,诸如偏移、倒转以及镜像等等,这里是因为对于各种坐标系还不太了解的原因,接下来梳理下可能用到的各种坐标系。
1、Android view坐标系
竖屏状态下,坐标原点在左上角,x轴 由左上角点 向右 延申,y轴 由左上角点 向下 延申。
一般textureCoords就是按照此种方式进行描述,如左上角(0, 0)、右上角(1, 0)、左下角(0, 1)、右下角(1, 1)
2、OpenGL世界坐标系
坐标原点在屏幕中心,x轴为水平方向,y轴为竖直方向,z轴穿过坐标原点向外为正方向,满足右手法则。
这也是我们绘图要打交道最多的一个坐标系,一般的vertexCoords就是按照此种坐标系描述,如左上角(-1, 1)、右上角(1, 1)、左下角(-1, -1)、右下角(1, -1)
3、立体坐标系
此种坐标系在OpenGL中 3D立体绘制 用的较多,数学模型中坐标系为:在2d平面上,水平方向为x轴,y轴垂直于x轴,垂足为坐标原点,z轴穿过坐标原点向上,延伸成为 3D 坐标系。
在立体几何的绘制过程中,由于 OpenGL 的世界坐标系 与 数学模型中的 立体几何坐标系是存在差异的,所以绘制的时候要多注意,该旋转的旋转。
3、旋转的几种情况
既然上文提到了旋转,这里也简单说下常用的旋转:
1、通过GLSL 在着色器中进行上下翻转,如下:
"#extension GL_OES_EGL_image_external : require"
"precision mediump float;" +
"varying vec2 vCoordinate;" +
"uniform samplerExternalOES uTexture;"