如何重新定义glm矩阵变量或删除其变换?

时间:2018-12-30 16:43:31

标签: c++ opengl glm-math

我需要不使用for循环一个接一个地制作几个模型。我首先用glm::mat4 model(1)定义一个,对其进行一些平移和旋转,然后我想删除其所有变换。但是,使其等于NULL无效。我可以调用glm中的某些功能吗?

另外,有人可以解释为什么在声明glm矩阵变量时为什么需要添加“(1)”。没有它是行不通的。声明glm矩阵数组glm::mat4 models[]时是否还需要添加一些内容?因为数组似乎没有存储变量。

1 个答案:

答案 0 :(得分:1)

glm::mat4的默认构造函数不会初始化矩阵,而是使矩阵的字段保持未初始化状态。

glm API documentation是指The OpenGL Shading Language specification 4.20

  

5.4.2向量和矩阵构造器

     

如果向量构造函数只有一个标量参数,它将用于将构造的向量的所有分量初始化为该标量的值。 如果矩阵构造函数只有一个标量参数,则它将用于初始化矩阵对角线上的所有分量,并将其余分量初始化为0.0。

这意味着,要通过Identity matrix初始化矩阵,必须使用具有单个标量的构造函数:

glm::mat4 model(1.0f);

当然可以将Identity matrix分配给现有矩阵:

model = glm::mat4(1.0f); 

动态数组,例如std::vector可以轻松生成100个身份矩阵:

std::vector<glm::mat4> models(100, glm::mat4(1.0f));