Unity Cg/HLSL Shader中向量和矩阵的构造方式
目录向量的构造向量使用同类型的构造器构造CG(不是所有的HLSL版本)单值构造向量使用低维向量构造高维向量CG(不是所有的HLSL版本)高维向量转换到低维向量矩阵的构造使用数值构造float3x3可以从三个向量构造从float4x4截取出float3x3参考资料向量的构造向量使用同类型的构造器构造float2 a = float2(1.0, 2.0);float3 b = float3(-1.0,
·
目录
向量的构造
向量使用同类型的构造器构造
float2 a = float2(1.0, 2.0);
float3 b = float3(-1.0, 0.0, 0.0);
float4 c = float4(0.0, 0.0, 0.0, 1.0);
CG(不是所有的HLSL版本)单值构造向量
float4 a = float4(0.0); // = float4(0.0, 0.0, 0.0, 0.0)
使用低维向量构造高维向量
float2 a = float2(0.1, 0.2);
float3 b = float3(0.0, a); // = float(0.0, 0.1, 0.2)
float4 c = float4(b, 1.0); // = float4(0.0, 0.1, 0.2, 1.0)
CG(不是所有的HLSL版本)高维向量转换到低维向量
float4 a = float4(-1.0, 2.5, 4.0, 1.0);
float3 b = float3(a); // = float3(-1.0, 2.5, 4.0)
float2 c = float2(b); // = float2(-1.0, 2.5)
矩阵的构造
矩阵是行主的,传入的参数按行填充。
使用数值构造
float3x3 m = float3x3(
1.1, 1.2, 1.3, //第一行
2.1, 2.2, 2.3, //第二行
3.1, 3.2, 3.3 //第三行
这和GLSL是不同的,GLSL的mat3是列主。移植shader时一定要注意这个区别。
float3x3可以从三个向量构造
float3 row0 = float3(0.0, 1.0, 0.0);
float3 row1 = float3(1.0, 0.0, 0.0);
float3 row2 = float3(0.0, 0.0, 1.0);
float3x3 m = float3x3(row0, row1, row2);
由于float3x3是行主的,所以传入的三个向量分别是float3x3的三行。
从float4x4截取出float3x3
float4x4的左上角3x3元素会被截取,并填入float3x3
float4x4 m = float4x4(1.1, 1.2, 1.3, 1.4,
2.1, 2.2, 2.3, 2.4,
3.1, 3.2, 3.3, 3.4,
4.1, 4.2, 4.3, 4.4);
float3x3 n = float3x3(m);
// = float3x3(1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3)
参考资料
《Cg Programming in Unity》
更多推荐


所有评论(0)