Shader中表达式和控制语句
来源:互联网 发布:嵌入式软件 大公司 编辑:程序博客网 时间:2024/05/16 01:27
新手写Shader时经常困惑在Shader那些语法能用,那些不能用,很纠结,下面就对Shader中表达式和控制语句进行一些总结:
关系操作符
CG中有6种关系操作符:“<”、“<=”、“!=”、“==”、“>=”、“>”,这个就不用说明含义了吧。
CG语言表达式允许对向量使用关系操作,例如:
float3 A=float3(0.5,0.1,0.9);float3 B=float3(0.6,-0.1,2.0);bool3 c=A<B;结果:float3(true,false,true)注意被操作的两向量必须长度一致。
逻辑操作符
逻辑与:“&&” 逻辑或:“||” 逻辑非:“!”
跟C#操作类似。
数学操作符
CG中数学操作符有:乘法,/除法,-减法或取反,+加法,%取余;++,–,=,/=,+=,-=;
移位操作符
Cg 语言中的移位操作符,功能和 C 语言中的一样,也可以作用在向量上,但是向量类型必须是 int 类型
int2 a = int2(0.0,0.0);int2 b = a>>1;
Swizzle操作符
可以使用 Cg 语言中的 swizzle 操作符( . )将一个向量的成员取出组成一个新的向量。
swizzle 操作符后接 x 、 y 、 z 、 w ,
分别表示原始向量的第一个、第二个、第三个、第四个元素; swizzle 操作符后接
r 、 g 、 b 和 a 的含义与前者等同。
例如:
float4(a, b, c, d).xyz 等价于 float3(a, b, c)float4(a, b, c, d).xyy 等价于 float3(a, b, b)float4(a, b, c, d).wzyx 等价于 float4(d, c, b, a)float4(a, b, c, d).w 等价于 float d
swizzle 操作符只能对结构体和向量使用,不能对数组使用
条件操作符
expr1 ? expr2 : expr3;
控制流语句
条件语句有: if 、 if-else ;循环语句有: while 、 for 。 break语句可以和在 for 语句中使用。 Switch 、 case 和 default 在 Cg 中作为保留关键字存在,但
是它们目前不被任何 profile 所支持。
建议:像循环语句这种控制语句尽量不要用,如果死循环就不好了,再说也没必要在shader中去循环啥。
大体上就这么多,不明白地方留言交流。
0 0
- Shader中表达式和控制语句
- 表达式和流程控制语句
- javaScript-运算符、表达式和控制语句
- Shader学习之Cg语言三(Cg表达式与控制语句)
- Unity中Shader LOD控制
- Unity中Shader LOD控制
- JavaScript中:表达式和语句的区别
- Unity3d中shader属性的控制
- Python中控制语句
- 第三次上机报告:基本运算符和表达式及选择和重复控制语句
- Oracle中操作语句和控制语言解析
- PL/SQL中流程控制语句 和Oracle临时表
- 表达式、语句和块
- 表达式和语句
- 表达式和基本语句
- C++表达式和语句
- (四)表达式和语句
- 语句和表达式
- MacOS Sierra允许安装任何来源App
- Editing a Book UVA
- Flume架构以及应用介绍
- Nginx的配置文件nginx.conf
- 代理模式——详解静、动态代理
- Shader中表达式和控制语句
- 驱动层双机调试,文件保护,进程保护
- Thinkphp框架的重定向问题
- CSS 背景图片和背景颜色融合,以及多张背景图片融合显示
- [bigdata-63] ssh连接超时问题解决
- Guava官方文档-RateLimiter类
- 在线编辑器
- 深度学习检测方法梳理
- log4j重写JDBCAppender 解决单引号问题