向量与矩阵的构造

一、向量

向量的构造函数可以阶段或者加长一个向量

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

原文地址:https://www.cnblogs.com/keguniang/p/9872868.html