HLSL数据类型
微软新型的高级渲染语言(High_Level Shader language ) HLSL数据类型
1.标准数据类型
数据类型bool,int,float,double,half(16位的float数值).
const修饰符的变量、编译器会把它放在一个不需要些的内存空间、因为变量不可以被修改、声明时必须初始化.
row_major、colmajor, 作用用来指定当前定义的元素,是使用行主序还是列主序进行存放, row_major float4×4 WorldMatrix; 注:列主序运行效率高.
static 该修饰符具有全局作用域.防止渲染器变量暴露给应用程序.任何API函数不能获得static类型变量的值.
extern 含义和static相反,在shader以外声明的,没有用关键字声明的全局变量默认为extern.
uniform 只能使用API方法改变它,并且只在两次绘制间被改变.一旦该类型变量被赋值所有的顶点或像素都会看到同样的值.
shared 用来修饰Shader变量表明它在不同的效果(effect)中共享.
2.向量
向量float3 fvector; 等价于vector<float,3> fvector; ( 后者看起来像是模板…)
向量的寻址,一个向量最多包括4个元素,可以使用x,y,z,w或者r,g,b,a来进行寻址.
向量元素可以混合存取.(float4 pos; float2 temp=pos.xy;)
在一次操作中目标向量的同一个元素不能出现两次,寻址时候命名集合不能混合(matrix.xg).
向量运算” * “,点乘用dot(a,b).
float4 a,b;
float4 v=a*b;
v.x=a.x*b.x;
…
v.w=a.w*b.w;
float v=dot(a,b);
v=a.x*b.x+a.y*b.y+a.z*b.z+a.w*b.w;
3.矩阵
定义. float4×4 fMatrix;
存取, 0基准位置法中行列号前面有个字母m
0基准行列位置法,
_m00,_m01,_m02,_m03
_m10,_m11,_m12,_m13
_m20,_m01,_m22,_m23
_m30,_m31,_m32,_m33
1基准行列法,
_11,_12,_13,_14
_21,_22,_23,_24
_31,_32,_33,_34
_41,_42,_43,_44
矩阵混合存取与向量一样.
下标存取不能使用操作符” . “,不能混合存取.
矩阵式行主序还是列主序,可在编译时候指定,默认情况下是列主序,可以通过 #pragma pack_matrix(row_major)或者#pragma pack_matrix(col_major)指定
矩阵乘法用mul()来处理…
