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

Posted

技术标签:

【中文标题】如何重新定义 glm 矩阵变量或删除其变换?【英文标题】:How to redifine glm matrix variable or remove its transform? 【发布时间】:2018-12-30 16:43:30 【问题描述】:

我需要在不使用 for 循环的情况下一个接一个地制作几个模型。我用glm::mat4 model(1) 定义第一个,对其进行一些平移和旋转,然后我想删除它的所有变换。但是让它等于 NULL 是行不通的。 glm 中有什么函数可以调用吗?

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

【问题讨论】:

【参考方案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));

【讨论】:

我明白谢谢!但是当使用模型变量在渲染循环中一个接一个地绘制多个对象时,如何在绘制第二个之前清理第一个的转换?我无法重新定义 glm::mat4 model(1) 来恢复它。还有其他的吗? @JohnSmith model = glm::mat4(1.0f); 它不允许我重新定义变量。 @JohnSmith 不是没有类型声明不是glm::mat4 model = glm::mat4(1.0f);,只是model = glm::mat4(1.0f); 好的,谢谢,我明白了。如果我使用循环来渲染对象,我可以重新定义它,所以我会这样做。

以上是关于如何重新定义 glm 矩阵变量或删除其变换?的主要内容,如果未能解决你的问题,请参考以下文章

使用 GLM(旋转)为 OpenGL 创建变换矩阵

有没有办法从glm中的视图矩阵中提取变换矩阵?

如何解决glm标签重新定义错误[关闭]

opengl 矩阵问题

相机 旋转

相机 旋转