向量与矩阵的构造
一、向量
向量的构造函数可以阶段或者加长一个向量
1>如果讲一个较长的向量传递给一个较短向量的构造函数,那么向量将自动取短到对应的长度。
vec4 color;
vec3 RGB = vec3(color);//现在RGB只有前三个分量了
2>加长向量
vec3 white = vec3(1.0);//white = (1.0,1.0,1.0)
或者可以直接将标量值传递给向量
translucent半透明的
vec4 translucent = vec4(white,0.5);//translucent = (1.0,1.0,1.0,0.5)
二、矩阵的构建
1>对角矩阵
只需要向构造函数传递一个值,矩阵的对角线元素就设置为这个值,其他元素全部设置为0
例如单位矩阵可以直接写成:mat3(1.0)
矩阵按列优先
让我们来看一个简单的例子。
vec2 v = vec2(10.0, 20.0); mat2 m = mat2(1.0, 2.0, 3.0, 4.0);
// Remember this is column major. Equivalently,
// 注意它是列优先的。等价于,
// mat2 m;
// m[0][0]=1.0;
// m[0][1]=3.0;
// m[1][0]=2.0;
// m[1][1]=4.0;
// m = glm::transpose(m) ;
vec2 w = m * v; // = vec2(1 * 10 + 3 * 20, 2 * 10 + 4 * 20)
三、结构体
如果定义了一个结构体,那么它会自动的创建一个新类型,并且隐式定义一个构造函数,将各种类型的结构体元素作为输入参数。
例如:
struct Particle{
float lifetime;
vec3 position;
vec3 velocity;//速度
}
Particle p = Particle(10.0,pos,vel);//pos,vel均为vec3类型。
四、length()
向量和矩阵类型可以使用length()方法,向量的长度就是包含的分量的个数,矩阵的长度就是它包含的列的个数。
例如:
mat3*4 m;
int c = m.length();//c=3 m的列数为3
int r= m[0].length();//r=4 第0列向量中分量的个数为4