1、GLSL是什么
GLSL是图形开发语言(专门为图形开发设计的编程语言)
2、语法
1、说到语法肯定要先从注释说起
单行注释://
多行注释:/* */
2、说到注释怎么少得了命名规范(毕竟不是一个人开发东西,而且如果命名不规范后面维护很痛苦)
1 )数字和下划线不能为变量的第一个字符
2 )变量名不能包含连续的下划线
3 )系统变量都是以 gl 开头,不允许我们在变量名、类名、常量、方法中以 gl 开头(以gl开头会影响自己的水准的哦)
4 )见名知意
3、真正的语法来了(上面的真的很重要)
1、基本数据类型,以及他们的定义与初始化
1 )基本数据类型( float、int、bool )
2 )定义与初始化
int i=1500;
float f =9.0f;(float类型必须要有小数点并且数字后面要加f)
bool b =true;
2、聚合数据类型 - 向量(向量:有方向有大小的变量)
向量的表示上面的图是向量的表示方法,我们般用到的是float类型,那么说完向量的表示方法就在说下它的定义、初始化、如何赋值、与如何取值吧(这里我就以float的3D向量为例其他都是一样的)
1 ) 首先是初始化与定义
1.vec3 xyz =vec3(0.0f,0.1f,0.3f);
2.vec3 xyz =vec3(0.0f,0.1f,0.3f);
vec4 rgba =vec4(xyz,0.1f);
2 ) 取值和赋值(vec3 xyz =vec3(0.0f,0.1f,0.3f);)
取值:xyz.x;
赋值:xyz.x =0.1f;
3、聚合数据类型 - 矩阵
同向量这里直接说矩阵的定义与初始化
1 )mat3 m = mat3(1.0f , 2.0f , 3.0f, 4.0f , 5.0f ,6.0f , 7.0f , 8.0f , 9.0f );
矩阵的填充是先填充列在填充行,以上面的m为例,他用矩阵显示出来就是下面的形式
2 )矩阵也可以用向量来表示如下
vec3 v1 =vec3(1.0f , 2.0f , 3.0f)
vec3 v2 =vec3(4.0f , 5.0f , 6.0f)
vec3 v3 =vec3(7.0f , 8.0f , 9.0f)
mat3 m =mat3(v1 , v2 , v3);
3 )矩阵元素的访问形式(mat3 m = mat3(1.0f , 2.0f , 3.0f, 4.0f , 5.0f ,6.0f , 7.0f , 8.0f , 9.0f ) )
vec3 xyz =m[1] =(1.0f , 2.0f , 3.0f); 这种形式是访问矩阵中的某一列
float s =m[1][1] =1.0f;这种形式是访问矩阵的具体某一个元素
4、结构体
1 、结构体:从逻辑上讲不同的类型的数据组到一个数据集合中
2、作用:方便使用,简单运算
3、定义: struct info{ vec3 color; vec4 xyzw}
4、使用:
info p =info(...)
p.color;
5、类型修饰符
1 )attribute (只能出现在顶点着色器中(vertex shader ) 用来表示顶点数据)
注意:1.只能出现在顶点着色器中
2.只能用来修饰float 类型的变量,不能修饰其他类型的变量
2 )uniform :从宿主语言将我们需要的变量传递到GLSL中,主要出现在顶点(vertex shader)和片元(fragment shader)着色器
3 )varying 用来传递顶点着色器(vertex shader)中的数据到片元(fragment shader)中
4 )const 常量值不可变
5 )in、out 、inout
in修饰输入变量
out修饰输出变量
inout修饰输入输出变量
网友评论