2017-07-21 44 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

除了手動設置這些條目之外,是否有一種很好的方法可以完全覆蓋矩陣的翻譯? –