当前位置:   article > 正文

OpenGL ES基础-(2)着色器语言(GLSL)_opengl es glsl

opengl es glsl

一、名词解释

1、图元:是图形软件中用来描述各种图形元素的函数。图元是组成图像的单位,在OpenGL ES中,点、线、三角形是OpenGL的基本图元,多边形由若干个三角形组成,圆则由无数个三角形无限逼近得到的。

2、渲染:表示计算机从模型创建最终图像的过程(OpenGL只是其中一种渲染系统)OpenGL是基于光栅化的系统用于生成图像。

3、模型:物体对象或场景对象,是通过几何图元来构建的,图元与模型的顶点也存在这对应的关系。

4、光栅化:将数学描述转换为屏幕位置相对应的像素片元。

5、着色器:专为图形处理单元GPU编译的小程序,OpenGL在内部包含了所有编译器工具,可以从着色器源代码创建GPU所需的编译代码并执行。常用的着色器有顶点着色器、片元着色器等。

6、像素:显示器上最小的可见单元。

7、片元:候选的像素,可以放置在帧缓冲区的像素,但他也可能被剔除。

8、OpenGL渲染管线

渲染流水线:是显示芯片内部处理图形信号互相独立的并行处理单元。简单点来说,就是一系列有序的处理阶段的序列,用于把我们应用中的数据转化到OpenGL生成一个最终图像的一个过程。

二、什么是GLSL?

OpenGL着色语言(OpenGL Shading Language)专门为图形开发设计的编程语言。

三、GLSL基本语法?

1、注释:

单行注释:“//”

多行注释:“/*...*/”

2、main()没有返回值

3、每条语句结尾都必须添加一个";"

4、Android上OpenGL ES2.0中基本数据类型:
浮点型(float)、布尔型(bool)、整型(int)、矩阵型(matrix)以及向量型(vec2、vec3等)等。 总体来说,

这些数据类型可以分为标量、向量、矩阵、采样器以及数组等几类。

4.1、标量类型

类型描述
int有符号二进制补码的32位整数
uint无符号的32位整数
floatEEE 32位浮点值
bool布尔值

4.2、向量类型

基本类型2D向量3D向量4D向量
intvec2(包含两个浮点型的向量)vec3 vec4
floativec2ivec3ivec4
boolbvec2bvec3bvec4

向量的初始化:

a、使用这些类型声明的变量的初始化过程 与 标量部分是类似的:

vec3 xyz=vec3(0.0,0.2,0.3);
vec4 rgba=vec4(0.0,0.2,0.3,1.0);

b、加长
vec3 xyz=vec3(0.0,0.2,0.3);

vec4 rgba=vec4(xyz,1.0);

c、取短
vec4 rgba=vec4(0.0,0.2,0.3,1.0);
vec3 xyz=rgba.rgb;

vec3 xyz=rgba.xyz;

d.vec3 xyz=vec3(1.0);等价于vec3 xyz=vec3(1.0,1.0,1.0);


4.3、矩阵类型

基本类型矩阵类型矩阵类型矩阵类型
floatmat2mat3(3*3的矩阵)ma


矩阵的初始化:

第一种方式:mat3 m=mat3(1.0 , 2.0 ,3.0 , 4.0, 5.0, 6.0, 7.0 ,8.0 , 9.0);

第二种方式:vec3 column1=vec3(1.0 , 2.0 ,3.0 );
vec3 column2=vec3(4.0, 5.0, 6.0 );
vec3 column3=vec3( 7.0 ,8.0 , 9.0 );
mat3 m=mat3(column1,column2 ,column3);


第三种方式:vec2 column1=vec2(1.0 , 2.0 );
vec2 column2=vec2(4.0, 5.0 );
vec2 column3=vec2( 7.0 ,8.0 );
mat3 m=mat3(column1 ,3.0
                        ,column2 ,6.0

                        ,column3 ,9.0);

4.4、结构体:从逻辑上将不同类型的数据组合到一个数据集合中

作用:方便使用,检查运算

定义:

struct info(){

    vec3 color;

    vec4 xyzw;

    vec2 st;

}

采样器:

采样器类型说明
sampler2D(常用)用来访问二维贴图
sampler3D用来访问三维贴图
samplerCube用来访问立方贴图

4.5、数组:有限个类型相同的变量集合

GLSL数组特性以及注意事项:

    a、GLSL支持任意类型数组,包括结构体

    b、数组的索引是从0开始的

    c、数组可以定义大小、或者没有大小,但是建议在不必要的情况下,还是指定大小的好。

    d、数组属于GLSL的第一等类型:

        数组在GLSL里面是有构造函数的,并且可以用作函数的参数和返回值类型

        可以静态初始化一个数组的值

数组的定义:

一维数组:

    float c[3];

    float[3] c;

    int index[]; //未定义维数,稍后可以重新声明

二维数组:

    float c[3][5];

    c.length(); //得到长度为3,待验证

    c[2].length(); //得到长度为5

4.6、空类型

空类型用void表示,仅用来声明不反悔值的函数

5、类型修饰符

 attribute:一般用于经常修改的信息,例如:颜色、顶点......

    a、只有在顶点着色器中才会有这哥们(attribute)

    b、attribute是属性限定符

    c、只能用来修饰浮点数的标量、浮点数的向量、浮点数的矩阵变量,不能用于修饰其他类型

uinfrom:用于不经常更改的信息,用于顶点着色器和片元着色器

    a、uinfrom是一致变量限定符

    b、主要出现在顶点和片元着色器

    c、可以修饰任何类型的变量

verying:用来传递顶点着色器中的数据到片元着色器中

const:被const修饰的变量值不可变,常量,编译时常量

(编译时常量:在声明时要进行初始化,编译器在编译的时候不需要给他分配任何运行时资源)

int和out:用in修饰的变量代表的是输入变量,用out修饰表示的输出变量

inout:用来修饰参数试试输入输出参数,同时具有两种功能

5.变量命名规范:允许使用字母、数字、以及"_"来组成。

注意:

1、数字和下划线不能为变量名的首字符;

2、变量名不能出现连续下划线;

3、系统变量都是以“gl”开头,因此用户自定义的变量名不能以“gl”开头;

4、见名知意,若变量名由多个单词组成,第一个单词的首字符应为小写字母,其余单词的首字符应为大写字母


本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号