3D开发学习-着色语言 Shading Language基础(二) 使用

来源:互联网 发布:淘宝宠爱之名是真的吗 编辑:程序博客网 时间:2024/06/12 01:45

第一:在上一篇博客中,写了shading language的基础类型,现在说一下shading language的基础类型的声明,初始化和作用域问题.

1.声明,作用域及初始化:

变量的声明及作用域与C++语法类似,可以在任何需要的地方声明,同时作用域也与C++类似,分为局部变量和全局变量.如下:

int a , b;   //全局变量a和bvec3 aPosition = vec3(1.0 , 2.0 ,3.0); //全局变量并赋值void myFunchtion(){  int c = 14;//局部变量c  a = 4;//全局变量赋值  b = a*c;}
向量和矩阵的初始化还有一些技巧,如下:

float a = 12.3;float b = 11.4;vec2 va = vec2(2.1 , 2.2); //声明二维向量并赋值vec2 vb = vec2(a , b); vec3 vc = vce3(vb , 11.1);//声明三维向量并赋值vec4 vd = vec4(va ,vb);mat3 ma = mat3(vc , vc ,vc);//3X3矩阵mat3 mb = mat3(2.1); //等同于{2.1 , 0 , 0 , 0 , 2.1 , 0 , 0 , 0 , 2.1}

2.变量初始化的规则:

a.常用初始化方式:变量可以在声明的时候就初始化;

int a = 2 , b = 3 , c ;
b.限定符修饰的变量必须在声明的时候初始化:

const float k = 1.1; //常量初始化
c.属性变量,一致变量,易变变量在声明的时候一定不能初始化:

attribute float angleSpan;     //属性变量不可初始化uniform int l ;  //一致变量不可初始化varying vec3 position; //易变变量 不可初始化


第二,运算符.与大多数编程语言一样,常用的运算符都是一样的.

1.索引:

float array[10]; //声明一个大小为10的数组array[2];//拿到索引为2的数据vec3 position = vec3(1.0 , 2.0 , 3.0);float one = positon[1]; //拿到索引为1的数据

2.混合选择:可以通过 " .  "混合选择;

vect4 color = vec4(0.3 , 0.4 , 0.5 , 0.6);vec3 temp = color.agb; //实际数据(0.4 , 0.5 , 0.6)vec4 temp1 = color.aaab;//实际数据(0.6 , 0.6 , 0.6 ,0.5)

3.算数运算符.包括(++    --    -(一元非)     !    *   /    +    -)

4.其他运算符:包括(<      >     <=      >=    ==   !=    &&   ^^   ||   ?:     =    +=    -=    *=    /=)

因为3和4都和常规的编程语言一样就不做多余解释了;

第三:类型转换:

着色语言没有提供类型自动提升,赋值表达式的两个操作数类型必须完全相同.另外调用的函数的参数也要完全相同.而且着色语言没有提供类型的强制转换,只能通过构造函数实现;

float a = 1.0;bool b = bool(a);

第四,限定符:着色器语言的限定符主要有如下几个:

uniform mat4 uMVPMatrix;//一致变量修饰符uniformattribute vec3 aPositon;//属性变量修饰符attributevarying vec4 aaColor;//易变变量修饰符varyingconst int con = 5 ;//常量修饰符 const

第五,流程控制.

和常规的编程语言一样,着色语言有if-else条件语句,while(do-while)循环语句和for循环语句.语法也基本一致.


第六:函数的声明与使用:

基本格式如:   <返回类型>  函数名  (<参数序列>) {/*函数体*/}

需要注意的是在着色语言中有三种特定的修饰符

a. in 代表的是输入性参数

b. out 代表的是输出型参数
c . inout 代表的是输入输出型参数

第七:片元着色器中的浮点变量精度指定,从低到高分别是lowp   medium   highp

lowp float color;//精度级别lowpvarying medium vec2 Coord;//精度级别mediumhighp mat4 m;//精度级别medium

1 0
原创粉丝点击