Cg中的操作符与C语言中很类似,所以下面我就只是记录操作符对应的符号,细节和用法看着符号就会了。
关系操作符:<,<=,!=,==,>=,>
逻辑操作符:&&,||,!
数学操作符: * 乘,/除,-取反, + 加,-减, % 求余, ++,–,*=,/=,+= , -=
移位操作符:>>,<< 移位操作符作用到向量上时只能是int类型
Swizzle 操作符:可以使用 Cg 语言中的 swizzle 操作符( . )将一个向量的成员取组成一个新的向量。 swizzle 操作符被 GPU 硬件高效支持。 swizzle 操作符后接 x 、 y 、 z 、 w ,分别表示原始向量的第一个、第二个、第三个、第四个元素; swizzle 操作符后接r 、 g 、 b 和 a 的含义与前者等同。不过为了程序的易读性,建议对于表示颜色值的向量,使用 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

注意, Cg 语言中 float a 和 float1 a 是基本等价的,两者可以进行类型转换; float 、 bool 、 half 等基本类型声明的变量也可以使用 swizzle 操作符。例如:

float a = 1.0;
float4 b = a.xxxx;

注意: swizzle 操作符只能对结构体和向量使用,不能对数组使用,如果对数组使用 swizzle 操作符则会出现错误信息: error C1010: expression left of . ” x ” is not a struct or array 。要从数组中取值必须使用 [] 符号。例如:

float a[3] = {1.0,1.0,0.0};
float b = a[0]; //正确
float c = a.x; //编译会提示错误信息

条件操作符 : expr1 ? expr2 : expr3
例:

float3 h = float3(-1.0,1.0,1.0);
float3 i = float3(1.0,0.0,0.0);
float3 g = float3(1.0,1.0,0.0);
float3 k;
k = (h < float3(0.0,0.0,0.0))?(i):(g);

三元向量 h 与 float3(0.0, 0.0, 0.0) 做比较运算后结果为( true, false, false ) , 所
以 i 的第一个数据赋值给 K 的第一个数据, g 的第二个和第三个数据赋值给 k 的第二
个和第三个数据, K 的值为 (1.0, 1.0, 0.0) 。
操作符优先顺序

控制流语句:条件语句: if 、 if-else ;循环语句: while 、 for 。 break语句可以和在 for 语句中使用。
Cg 语言中的控制流语句要求其中的条件表达式返回值都是 bool 类型,这一点是与 C 语言不同之处( C 语言中,条件表达式返回值可以是 0 、 1 )
return 只能作为最后一条语句出现。函数的递归调用( recursion )在Cg 语言中是被禁止的。 Switch 、 casedefault 在 Cg 中作为保留关键字存在,但是它们目前不被任何 profile 所支持。

Shader学习之Cg语言三(Cg表达式与控制语句)相关推荐

  1. Shader学习之Cg语言一(Cg语言概述)

    该篇博客是我自己在学习Shader时,看<GPU编程与CG语言之阳春白雪下里巴人 >Cg语言概述这章,觉得有些东西自己记不住,因此记录下来. Cg ToolKit下载地址: NVIDIA ...

  2. Shader编程学习笔记(九)—— Cg语言入门1 - 输入输出和语义

    Cg入门一:输入输出和语义 本小节对Cg语言进行一个入门了解. 在以前的课程中,我们了解了渲染管线.顶点和片段程序和颜色计算等,在本小结中来了解一个简单的shader的顶点和片段程序的输入输出以及常用 ...

  3. Shader学习之Cg语言二(Cg数据类型)

    由于在用Cg语言写代码的时候,没有好用的编辑器,也不可以像Java,C++,C#这类语言的断点调试,所有逻辑需要写得很小心,变量名字也需要自己全部记住,相当于在文本编辑器上写代码,这样一些数据类型名称 ...

  4. Shader CG语言

    Shader介绍 Shader是可编程图形管线的算法片段,它主要分为两类,Vertex Shader和Fragment Shader. 圣典shader总目录(在最下方) vs自动补全代码,语法高亮显 ...

  5. Cg语言学习笔记(1)

    最近在学习Unity3d Shader编程,Unity3d Shader使用的是Cg语言,网上找了一下Cg的教程,发现<Cg教程-可编程实时图形权威指南>不错,在学习此书的过程中记录一下笔 ...

  6. x%3e=y%3e=z的c语言表达式,我的C语学习笔记-C语言教程(三).doc

    我的C语学习笔记- C语言教程(三) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...

  7. Shader学习笔记(三)学习Shader所需的数学基础

    感受高数 一.笛卡尔坐标系 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 二.点和矢量 1.矢量和标量的乘法/除法 2.矢量的加法和减法 3.矢量的模 4.单位矢量 5.矢量的点积 6.矢量的叉积(cr ...

  8. 发挥GPU强大动力的CG语言

    ·CG推出的背景因素: 目前大部分的图形渲染系统的流水线由于各种原因,功能被限制为某些特殊效果,不具备扩充性,依据这些流水线编制的软件,只能实现特定的效果,这是一些游戏无法展现许多效果的罪魁.按道理, ...

  9. 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)

    Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...

最新文章

  1. 有规律格式化文本文件插入数据库
  2. SAP的SD模块中客户的销售视图--扩充客户销售范围
  3. Android实战技巧之十一:Android Studio和Gradle
  4. 一问就想不起来的问题,来看看?
  5. python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法
  6. java使用初始化输入参数_使用初始化参数配置java web应用程序
  7. qmap按插入顺序排序_C++语言排序算法之插入排序
  8. 05-Echarts矢量地图实现、及常见效果
  9. 气象数据的简单数据分析处理——基于Notebook
  10. 黑莓手机刷linux,黑莓老机型ROM刷机资源
  11. nRF51822 官方 Blinky 工程(多彩 LED)
  12. 文件夹恶意软件WORM_AUTORUN.FIU处理
  13. 汽车计算机英语词汇,汽车专用英语词汇?
  14. Python-argparse库基本使用方法和add_argument() 参数详解
  15. Google文件系统
  16. Zotero 和它的朋友们: 一个文献阅读生态
  17. 行式 Excel 文件拆分
  18. Python线程超时自动终止 | Python利用ThreadPoolExecutor实现对多线程的超时自动终止 | Python3实现单线程超时自动强制停止
  19. Unity中根据设备名称获取串口号
  20. Excel如何快速小计求和

热门文章

  1. 这篇文章帮你避坑,教会你选购内存卡
  2. 第二课 模糊遮罩相框
  3. android手机密码忘了哪个电话打开,安卓手机锁屏密码忘了怎么办 解决锁屏密码六种方法介绍...
  4. 职业也如学习一样,逆水行舟不进则退
  5. node.js详细安装教程及使用
  6. 一键装机tomcat脚本
  7. 癌症来临,应该怎么办?
  8. 产品读书《金字塔原理》
  9. PVE安装ros系统
  10. chrome突然打不开网页,其他浏览器可以,解决办法