US2S3L3——特殊数据类型

本章代码关键字

1
2
数值类型维数 向量名 = 数值类型维数(num, ...)        //向量声明,最大维度不超过4维,可以使用bool声明bool向量
数值类型行数x列数 = { num, ... } //矩阵声明,矩阵最大行列不大于4,不小于1

特殊数据类型

注意:CG中向量,矩阵和数组是完全不同的,向量和矩阵是内置的数据类型,而数组则是一种数据结构,不是内置数据类型

  1. CG可以声明任意数值类型的矩阵和向量
  2. 向量最大维度不超过4维
  3. 矩阵最大行列不大于4,不小于1,在赋值时一定注意行列的关系
  4. bool​ 向量可以用来存储向量之间比较的结果

向量

向量类型属于CG语言的内置数据类型

内置的向量类型是基于基础数据类型声明的
向量的最大维度不超过4维,数据类型可以是任意数值类型(也就是基础数据类型的数值类型)

基本构成:

  • 数据类型2 = 数据类型2(n1,n2)
  • 数据类型3 = 数据类型3(n1,n2,n3)
  • 数据类型4 = 数据类型4(n1,n2,n3,n4)
1
2
3
4
5
6
7
8
9
//二维向量
int2 i2 = int2(2, 3);
float2 f2 = float2(2.0f, 3.1f);
half2 h2 = half2(3.0h, 4.0h);
fixed2 fix2 = fixed2(1.2, 2.5);
//三维向量(以float为例)
float3 f3 = float3(2, 3, 4);
//四维向量(以int为例)
int4 i4 = int4(1, 2, 3, 4);

关于如何提取向量中的分量,详见:US2S3L4——Swizzle操作符

矩阵

矩阵类型属于CG语言的内置数据类型

矩阵的最大行列不大于4,不小于1,数据类型可以是任意数值类型

基本构成:

  • 数据类型'n'x'm' = {n1m1,n1m2,n1m3.....}
  • 数据类型2x2
  • 数据类型3x3
  • 数据类型4x4
1
2
3
4
5
6
7
8
9
10
11
12
//矩阵声明示例(以2x3,3x3,4x4为例)
int2x3 mInt2x3 = { 1, 2, 3,
4, 5, 6 };

float3x3 mFloat3x3 = { 1, 2, 3,
4, 5, 6,
7, 8, 9 };

fixed4x4 mFixed4x4 = { 1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16 };

关于矩阵的元素的获取,其他声明方式,详见:向量和矩阵的更多用法

bool类型特殊使用

bool​ 类型同样可以用于如同向量一样声明,它可以用于存储一些逻辑判断结果

比如:

1
2
3
float3 a = float3(0.5, 0.0, 1.0);
float3 b = float3(0.6, -0.1, 0.9);
bool3 c = a < b;

运算后向量 c​ 的结果为:bool3(true, false, false)