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 、while、do{ }while 1.for循环可以在循环初始化条件中声明循环迭代变量,迭代变量的作用于直线于循环内 for(int i=0;i<10;++i){} 2.while(n<10){….} 3.do{…...}while(n<10)
(5) 流控制语句
(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);
(1) GLSL操作符与优先级
操作符 | 描述 |
() | 用于表达式组合,函数调用,构造 |
[ ] | 数组下标,向量或矩阵的选择器 |
. | 结构体和向量的成员选择 |
++ -- | 前缀或后缀的自增自减操作符 |
+ - ! | 一元操作符,表示正 负 逻辑非 |
* / | 乘 除操作符 |
+ - | 二元操作符 表示加 减操作 |
<> <= >= == != | 小于,大于,小于等于, 大于等于,等于,不等于 判断符 |
&& || ^^ | 逻辑与 ,或, 异或 |
?: | 条件判断符 |
= += –= *= /= | 赋值操作符 |
, | 表示序列 |
(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 | 丢弃当前片元,终止片元着色器执行(只能在片元着色器中使用,运行到该语句位置上时 片元着色器会立即终止) |
相关文章推荐
- 第02章 CORE C++_控制语句_选择_循环_分支_跳出_函数_声明_形参_返回值_重载_递归
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
- 流程控制语句:循环语句-do while
- vb.net 教程 2-4 流程控制:循环语句 For each...Next
- 第4天 流程控制语句与函数初识
- 3.Java语句的执行结构,分支语句,循环语句,特殊流程控制语句
- 黑马程序员 c#基础流程控制_循环语句
- 标准C---输入输出函数及控制流程语句
- JavaScript(一)--变量和数据类型/流程控制语句/函数/网页时钟/基于对象编程
- shell脚本之-if流程控制语句和for循环语句的使用
- 黑马程序员——学习笔记03.java流程控制语句和函数
- 【PHP】基础笔记 08 —— 流程控制 之 循环语句
- 流程控制语句--循环结构
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- 初识Java(Java流程控制-循环语句)
- shell基础及流程控制语句之一while循环
- js流程控制语句(循环)
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- js 中的流程控制-循环(for)语句