您的位置:首页 > 运维架构

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

2018-03-09 14:14 1136 查看
算数操作符 
(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 whiledo{ }while 1.for循环可以在循环初始化条件中声明循环迭代变量,迭代变量的作用于直线于循环内 for(int i=0i<10++i{} 2.whilen<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  HornerEvalPolynomial(float  coeeff[10] ,float x);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息