Cg中的表达式,表达式由操作符(operator)关联一个或多个操作数(operand)构成,我们首先阐述各种类型的操作符,并结合数据类型讲解操作符的具体使用方法。
cg中的操作符与c语言中的类似(操作符的功能和写法与c相同,但用法不尽相同),按照操作符的功能可以划分为:关系操作符、逻辑操作符、条件操作符。cg中有一类较为独特的操作符,称为swizzle操作符,这个操作符用于取出向量类型变量中的分量。此外,与c语言不同的是,cg允许在向量类型变量上使用操作符,例如>操作符可以用来比较两个向量各个分量的大小关系。cg中表达式还有很多与c语言不同的细节之处。
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
注意:swizzle操作符只能对结构体和向量使用,不能对数组使用