OpenGL - 算数操作符、循环语句、流程控制及函数声明

算数操作符  

(1)   GLSL操作符与优先级
操作符
描述
()  
用于表达式组合,函数调用,构造  
[ ]
数组下标,向量或矩阵的选择器  
.
结构体和向量的成员选择  
++ --
前缀或后缀的自增自减操作符  
+ - !
一元操作符,表示正 负 逻辑非  
* /
乘 除操作符  
+ -
二元操作符 表示加 减操作  
<> <= >= == !=  
小于,大于,小于等于, 大于等于,等于,
不等于 判断符  
&& || ^^  
逻辑与 ,或,  异或  
?:  
条件判断符  
= += –= *=  /=  
赋值操作符  
,  
表示序列  

(2)   操作符重载  
GLSL中大部分操作符都是经过重载的,也就是说他们可以用于多种类型的数据操作。 
特别是,矩阵和向量的算数操作符,在GLSL中都是经过严格定义的
例如:如果我们需要进行向量和矩阵之间的乘法   
             vec3 v; 
      mat3 m; 
      vec3 r=v*m; 
基本的限制条件:要求矩阵和向量的维度必须是匹配的! 
这里有一个例外 简单说一下 
两个向量相乘得到一个逐分量相乘的新向量, 
但是两个矩阵相乘得到的是通常矩阵相乘的结果。 
例如: 
vec2 a,b,c; 
c=a*b;      //c=(     a.x*b.x  ,a .y*b.y      ) 
 
mat2 m,u,v; 
m= u* v;   //m=( u00*v00+u01*v10      u00*v01+u01*v11 
                         u01*v00+u11*v10     u10*v01+u11+v11    ); 

(3)   控制流  
GLSL 的逻辑控制方式也是用的 if switch , 
if(){ 
}else{ 

switch(){ 
case:  
break; 
case:  
break; 
default : 
break; 
注意
如果没有使用 break 结尾,拿语句会继续执行 case 的内容。

(4)   循环语句  
GLSL 的循环语句是 for  while do{ }while  
1.for 循环可以在循环初始化条件中声明循环迭代变量,迭代变量的作用于直线于循环内  
for(int i=0 i<10 ++i {}  
2.while n<10 {….}  
3.do{…...}while(n<10)  

(5)   流控制语句  
语句
描述
break
终止循环体的运行,并且继续执行循环体外的内容 
continue
种植循环体内当前迭代过程的执行,跳转到代码块开始的部分并继续执行下一次迭代的内容 
return
从当前例程返回,可以带有一个函数的返回值(返回值必须与函数声明的返回类型相符合) 
dicard
丢弃当前片元,终止片元着色器执行(只能在片元着色器中使用,运行到该语句位置上时 片元着色器会立即终止) 

(6)   函数声明  
函数的作用:我们可以使用函数调用来取代可能反复执行的通用代码。  
声明:  
return Type functionName [accessmodifier] type,…..
…. 
// 函数体 
return returnValue // 如果 returnType void  ,则不需要 return 语句; 
 } 
 
注意 : 1.函数声明,变量名需要添加访问修饰符  
   2.GLSL支持用户自定义函数,同时它定义了一些内置函数  
   3.函数名称可以是任何字符、数字、下划线,但是不能使用数字,连续下划线或者gl_作为函数的开始  
4.返回值可以是任何内置的GLSL类型,或者用户定义的结构体和数组类型。  
5.返回值是数组时,必须现实的指定大小。函数返回类型是void则没有返回值  
6.函数的参数也可以是任何类型的函数,包括数组(这里数组必须设置大小)  
7.在使用一个函数前必须声明他的原型或者直接给出函数体。  
8.GLSL的编译器在使用函数前必须找到函数的声明,否则会产生错误  
9.函数原型只是给出了函数的形式,但是并没有给出具体的实现内容  
例如 :  

float  HornerEvalPolynomialfloat  coeeff[10] ,float x);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值