美文网首页
Shader中表达式和控制语句

Shader中表达式和控制语句

作者: passiony | 来源:发表于2018-06-29 22:04 被阅读108次

    新手写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中表达式和控制语句

          本文链接:https://www.haomeiwen.com/subject/gljzyftx.html