【Unity5.x Shaders】压缩数组Packed arrays

来源:互联网 发布:中超球员籍贯数据库 编辑:程序博客网 时间:2024/06/05 10:25

在Cg中有两种变量:单一值(single values)和压缩数组(packed arrays)。
压缩数组的定义类型 + 数字
例如float3,int4
压缩数组看起来跟普通的数组很像却又不一样,压缩数组的元素可以作为普通结构访问。

压缩数组中成员的访问及赋值

  • 通常通过x,y,z,w访问float4 a; a.x=2.0;
    Cg也提供别名:r, g, b,a
    这两种访问方式没有区别,但是不能混用,例如_Color.xgb是错误的

  • Cg允许压缩数组同时访问多个成员
    o.Albedo = _Color.rgb;

  • 允许重排这些元素的顺序,可以使用下面的代码交换颜色的红和蓝通道
    _Color.rgb = _Color.bgr;

  • 压缩数组可以被赋值单一值,它将拷贝给压缩数组的所有字段(涂抹smearing):

o.Albedo    =   0;  //  Black   =(0,0,0)o.Albedo    =   1;  //  White   =(1,1,1)
  • 也可以给压缩数组的部分成员赋值(蒙版masking
    o.Albedo.rg = _Color.rg;

压缩矩阵

Cg中允许类似于float4x4的类型,这代表了一个4行4列浮点数的矩阵

  • 你可以通过_mRC访问矩阵中的单一成员,这里的R代表行,C代表列
float4x4    matrix;//  ...float first = matrix._m00;//访问matrix中第1行第1列的元素float last  = matrix._m33;//访问matrix中第4行第4列的元素
  • _mRC也可以被连接
    float4 diagonal = matrix._m00_m11_m22_m33;
    这里把矩阵中的四个元素赋值给了float4类型的变量

  • 选择矩阵的整行可以使用方括号[]

float4 firstRow = matrix[0];// Equivalent tofloat4  firstRow = matrix._m00_m01_m02_m03;
0 0