1
我在代表模型转换矩阵的类中有一个glm::mat4
字段,我想每帧更新转换。但是,我想在每次更新转换时重新使用此字段中的矩阵,而不是将其设置为glm::mat4()
,我想这会浪费越来越多的内存,因为存储在那里的矩阵将被分配。我在想像这个泄漏?我有没有办法让glm“重新识别”矩阵?在glm中重用矩阵?
我在代表模型转换矩阵的类中有一个glm::mat4
字段,我想每帧更新转换。但是,我想在每次更新转换时重新使用此字段中的矩阵,而不是将其设置为glm::mat4()
,我想这会浪费越来越多的内存,因为存储在那里的矩阵将被分配。我在想像这个泄漏?我有没有办法让glm“重新识别”矩阵?在glm中重用矩阵?
有没有泄漏,你在做什么每一帧都类似于int i = 1
每一帧;
// Im assuming somewhere in your class you have this:
class Example{
public:
...
void Update();
void Draw();
private:
glm::mat4 m_Model;
};
void Example::Update()
{
// This will rotate the model 1 degree every time update is called
m_Model = glm::rotate(m_Model, 1.0f, glm::vec3(1, 0, 0);
}
void Example::Draw()
{
glUniformMatrix4fv(1, GL_FALSE, GL_FALSE, glm::value_ptr(m_Model));
// Draw model etc..
};
的一点是,你不必设置m_Model
到glm::mat4
每一帧,如果你只是将其保持在一个静态的位置(它总是在X,Y,Z位置),这相当于设置int i = 1
每一次更新,它都没有意义,因为它存储在你的类的内存中,并保留最后的值集,直到类被销毁。
所以我不应该从头开始,当我更新模型矩阵,而是选择只是更新矩阵?我基本上每帧更新一堆字段,比如'glm :: vec3 translation,float rotX,float rotY,float rotZ,glm :: vec3 scale',然后构造'glm :: mat4'。 –
您应该只在需要更新时更新数据。首先尝试对翻译进行硬编码,或者只设置一次,然后绘制模型。然后尝试每帧设置它们,然后在数据发生更改时设置转换。您将看到不同之处,您将了解哪种情况最适合您的使用情况。 –
除了手动设置这些条目之外,是否有一种很好的方法可以完全覆盖矩阵的翻译? –