如何重新定义 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) 来恢复它。还有其他的吗? @JohnSmithmodel = glm::mat4(1.0f);
它不允许我重新定义变量。
@JohnSmith 不是没有类型声明不是glm::mat4 model = glm::mat4(1.0f);
,只是model = glm::mat4(1.0f);
好的,谢谢,我明白了。如果我使用循环来渲染对象,我可以重新定义它,所以我会这样做。以上是关于如何重新定义 glm 矩阵变量或删除其变换?的主要内容,如果未能解决你的问题,请参考以下文章