相比于我们编程中常用的标量数据,矢量数据的初始化、读取标量元素和修改矢量分量的操作与使用标量数据有差异。
矢量初始化
对于矢量数据,首先我们要确定矢量宽度,也就是表4-2中的n值大小。一旦矢量n值大小确定,我们就可以初始化矢量中的元素。可以由一组标量、矢量或标量和矢量的组合来初始化一个矢量的值。
矢量初始化与数组初始化有点类似,具体的写法为:首先是一个用括号括起的矢量类型,后面是一个用圆括号括起的参数列表,各参数之间用逗号分隔。例如,如下代码用四个单精度浮点数初始化DataVec:
float4 DataVec = (float4)(1.0, 1.0, 1.0, 1.0);
在上述例子中,4个元素都是相同值,可以用如下代码:
float4 DataVec = (float4)(1.0);
除了使用标量,还可以使用小宽度的矢量来初始化大宽度的矢量,如下例子:
float2 DataA = (float2)(1.0, 1.0);
float2 DataB = (float2)(2.0, 2.0);
float4 DataC = (float4)(DataA, DataB);
除了上述两种方式初始化矢量外,还可以标量和小宽度矢量的组合来初始化大宽度矢量,如下例子:
float3 rgb = (float3)(0.25, 0.5, 0.75);
float4 rgba = (float4)(rgb, 1.0);