opengl.png
本文介绍一下OpenGL的基本概念。在OpenGL中,只能画三种图元,点、线、三角型。在OpenGLES2.0之后,引用也GLSL(OpenGL Shader Languge),它类似于C语言的语法。
有两种常用着色器,分别是顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)。
片元着色器是在顶点着色器之后被调用的。
顶点着色器,每个顶点运行一次,确定生成顶点最终的位置。一但确定了位置,OpenGL将利用这些点生成 点、线、三角形。
片元着色器,每个片元运行一次,它用于确定每个片元的点、线、三角形的最终颜色。片元是一个单一颜色的小矩形区域,类似于计算机屏幕上的像素。
加载着色器需要按下面的步骤进行加载:
着色器中的Uniform和Attribute变量是可以在外面赋值的。在赋值之前,我们首先获取变量的位置。可以通过下面的方法来获取:
取得 Attribute 变量位置后,还需要将顶点数组中的数据与 Attribute 变量关联。
maPositionLoc: Attribute 变量位置。 coordsPerVertex: 第个顶点坐标占用的数量。如x,y代表2 vertexStride: 每个顶点数据的宽度。 vertexBuffer: 数组
着色器分为 标量,向量,距阵,采样器,结构体,数组几种类型。
标量:布尔型(bool)、整形(int)和浮点型(float)等。
向量:
向量类型 | 说明 |
---|---|
vec2 | 包含了2个浮点数的向量 |
ivec2 | 包含了2个整数的向量 |
bvec2 | 包含了2个布尔数的向量 |
vec3 | 包含了3个浮点数的向量 |
ivec3 | 包含了3个整数的向量 |
bvec3 | 包含了3个布尔数的向量 |
vec4 | 包含了4个浮点数的向量 |
ivec4 | 包含了4个整数的向量 |
bvec4 | 包含了4个布尔数的向量 |
距阵:
矩阵类型 | 说明 |
---|---|
mat2 | 2x2浮点数矩阵 |
mat3 | 3x3浮点数矩阵 |
mat4 | 4x4浮点数矩阵 |
采样:
一般情况下,一个采样器变量代表一幅或一套纹理贴图
采样器 | 说明 |
---|---|
sampler2D | 用于访问二维纹理 |
smapler3D | 用于访问三维纹理 |
samplerCube | 用于访问立方贴图纹理 |
着色器一般包括下在几种变理限定符:
限定符 | 说明 |
---|---|
attribute | 一般用于每个顶点都各不相同的量,如顶点位置、颜色等。 |
uniform | 一般用于对同一组顶点组成的单个3D物体中所有顶点都相同的量,如当前光源的位置。 |
varying | 用于从顶点着色器传递到片元着色器的量 |
const | 用于声明常量 |