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

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

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

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

int a , b;   //全局变量a和b
vec3 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;//一致变量修饰符uniform
attribute vec3 aPositon;//属性变量修饰符attribute
varying vec4 aaColor;//易变变量修饰符varying
const int con = 5 ;//常量修饰符 const

第五,流程控制.

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


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

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

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

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

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

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

lowp float color;//精度级别lowp
varying medium vec2 Coord;//精度级别medium
highp mat4 m;//精度级别medium

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值