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'。 –
您應該只在需要更新時更新數據。首先嚐試對翻譯進行硬編碼,或者只設置一次,然後繪製模型。然後嘗試每幀設置它們,然後在數據發生更改時設置轉換。您將看到不同之處,您將瞭解哪種情況最適合您的使用情況。 –
除了手動設置這些條目之外,是否有一種很好的方法可以完全覆蓋矩陣的翻譯? –