2017-07-21 45 views
1

我在代表模型转换矩阵的类中有一个glm::mat4字段,我想每帧更新转换。但是,我想在每次更新转换时重新使用此字段中的矩阵,而不是将其设置为glm::mat4(),我想这会浪费越来越多的内存,因为存储在那里的矩阵将被分配。我在想像这个泄漏?我有没有办法让glm“重新识别”矩阵?在glm中重用矩阵?

回答

1

有没有泄漏,你在做什么每一帧都类似于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_Modelglm::mat4每一帧,如果你只是将其保持在一个静态的位置(它总是在X,Y,Z位置),这相当于设置int i = 1每一次更新,它都没有意义,因为它存储在你的类的内存中,并保留最后的值集,直到类被销毁。

+0

所以我不应该从头开始,当我更新模型矩阵,而是选择只是更新矩阵?我基本上每帧更新一堆字段,比如'glm :: vec3 translation,float rotX,float rotY,float rotZ,glm :: vec3 scale',然后构造'glm :: mat4'。 –

+0

您应该只在需要更新时更新数据。首先尝试对翻译进行硬编码,或者只设置一次,然后绘制模型。然后尝试每帧设置它们,然后在数据发生更改时设置转换。您将看到不同之处,您将了解哪种情况最适合您的使用情况。 –

+0

除了手动设置这些条目之外,是否有一种很好的方法可以完全覆盖矩阵的翻译? –