1.OpenGL介绍
OpenGl是用于渲染2D或者3D适量图形的跨语言跨平台API,可以实现简单的图形到复杂的三位景象。我们主要要学习的是OpenGL ES,为了让OpenGl更好的在手机等小型设备上使用,OpenGL 官方精简了一些方法和属性,整合出了OpenGL ES。作为一名移动开发者,了解OpenGL ES的使用可以让我们更高效的渲染图像和视频。
OpenGL ES渲染图像和我们平时直接在View里画图像有什么区别呢?我们知道渲染图像可以通过CPU渲染或者通过GPU渲染,CPU渲染我们一般可以叫做软件渲染,而GPU渲染一般被叫做硬件渲染或者硬件加速。这是因为在渲染图片的过程中经常会涉及到浮点数运算,而GPU天生就更擅长浮点数运算,所以把图像渲染这样的工作交给GPU不仅可以减轻CPU的负担,还加快了渲染的速度,因此我们说OpenGL ES渲染图片效率更高。而且OpenGL ES在Android平台还实现了双缓冲机制(源码分析可以看GLSurface源码小探)。
OpenGL ES在Android平台有三个主要支持版本:
- 2.0:支持Android2.2以后的版本
- 3.0:支持Android4.3以后的版本
- 3.1:支持Android5.0以后的版本
2.常见名词介绍
顶点(Vertex):OpenGL ES的基本元素有点,线,三角形。绘制图像的时候需要先确定顶点。
纹理(Fragmet):纹理决定了OpenGL绘制的内容。就像一张图片。
着色器(Shader):着色器是运行在GPU上的小程序,使用的语言是GLSL,分为顶点着色器和片元着色器。顶点着色器用于处理每个顶点的变换,例如平移,缩放,旋转,投影。每个顶点都会并行运行异常顶点着色器程序。片元着色器用来处理图像中每个像素点颜色计算和填充。
3.OpenGL语法介绍
GLSL是用来在OpenGL中编写着色器的语言,该语言会在GPU上运行。GLSL和C语言在语法上有很多相似之处,我们从基本类型,修饰符,内置变量来说明一下GLSL的语法
3.1.基本类型
向量和矩阵是GLSL的核心
vec2,vec3,vec4:浮点向量,分别对应二维向量,三维向量,四维向量
ivec2,ivec3,ivec4:整数向量,同样分别对应二三四维
mat2,mat3,mat4:浮点矩阵,分别对应2x2矩阵,3x3矩阵和4x4矩阵
sampler2D:二维纹理句柄
3.2.修饰符
const:(只读)常量变量。
attribute:只用于顶点着色器,一般用于经常修改的信息。
uniform:用于不经常修改的信息,可用于顶点和偏远着色器。
varying:经常用于需要从顶点着色器传递到片元着色器的变量,被这个修饰符修饰的变量在两个着色器的命名要一致。
3.3.内置变量
最经常用到的内置变量是顶点着色器和片元着色器的输出变量。
顶点着色器:gl_Position(顶点位置),gl_PointSize(顶点大小)
片元着色器:gl_FragColor(纹理坐标)
4.总结和引用
本篇文章介绍了一些OpenGL ES的基本概念,下一篇我们将开始在Android项目中使用OpenGL。
本篇文章大部分内容都是引用自以下两篇公众号,我在学习OpenGL的过程中也从以下两个教程中获益良多:
- 音视频开发之旅----音视频开发之旅(八)GLSL及Shader的渲染流程
- 开发的猫---【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】一、初步了解OpenGL ES