这篇文章是根据<OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例 >中对应章节的总结,看了好几本OpenGL ES的入门图书,只有这本让我在入门的时候不那么迷茫,强烈推荐!非常遗憾,这本书没有电子正版,我只能购买一本正版图书,然后下载一个pdf版本在公交上阅读。
着色语言概述
OpenGL ES 着色语言是一种高级的图形编程语言,其源自于广泛使用的C语言,同时具有RenderMan以及其他着色语言的一些优良特性,易于被开发人员掌握。简单来说,OpenGL ES着色语言主要包括一下特性:
- OpenGL ES 着色语言是一种高级的过程语言(注意,不是面向对象)
- 对顶点着色器、片元着色器使用的是同样的语言,不做区分
- 基于C/C++的语法以及流程控制
- 完美支持向量和矩阵的各种操作
- 通过类型限定符来管理输入和输出
- 拥有大量的内置函数来提供丰富的功能
着色语言基础
一. 数据类型概述
总体来说,数据类型可以分为标量,向量,矩阵,采样器,结构体以及数组等几类。
1. 标量:标量也被称为“无向量”,其值只具有大小,并不具有方向。OpenGL ES 着色语言支持的标量类型有bool、int、float。
2. 向量:OpenGL ES 着色语言中,向量可以看做是同样类型的标量组成的,其基本类型也分为bool、int以及float 3种。每个向量可以由2个、3个或者4个相同的标量组成。向量在着色器代码的开发中有着十分重要的作用,可以很方便地存储以及操作颜色、位置、纹理坐标等不仅包含一个组成部分的量。访问向量中的各个分量不但可以采用“.”加上不同的分量名,还可以将向量看成一个数组,用下标来进行访问。
3. 矩阵:矩阵按尺寸可以分为2x2矩阵,3x3矩阵,以及4x4矩阵。OpenGL ES 着色语言中,矩阵是按列顺序组织的,也就是一个矩阵可以看作为几个列向量组成的。对于矩阵的访问,可以将矩阵作为列向量的数据来访问,如:matrix为一个mat4,可以使用matrix[2]来获取该矩阵的第3列,其为一个vec4。
4. 采样器:采样器是着色语言中不同于C语言的一种特殊的基本数据类型,其专门用来进行纹理采样的相关操作。一般情况下,一个采样器变量代表一幅或一套纹理贴图。
5. 结构体:OpenGL ES 着色语言还提供了类似于C语言中的用户自定义结构体,同样也是使用struct关键字进行声明。
6. 数组:在着色语言中,开发人员可以声明任何类型的数组。声明数组的方式主要有两种: