2012-11-05 27 views
-1

如果你不明白我在問什麼,我的意思是 -是pushMatrix()/ popMatrix()能夠堆疊嗎?

glPushMatrix(); 
glPushMatrix(); 
glPushMatrix(); 
glPushMatrix(); // push matrix 4 times 
glTranslatef(...); 
//do stuff 
glPopMatrix(); // pull it up 1, so we can do more stuff 
glTranslatef(...); 
// do stuff 
glPopMatrix(); // and again, and again, etc 
glTranslatef(...); 
// do stuff 
glPopMatrix(); 
glTranslatef(...); 
// do stuff 
glPopMatrix(); 

會一切還在工作呢?

+0

仍然無法理解你在問什麼,以及你的意思。你能分享你在做這一切的背景嗎? –

+1

這是一個堆棧的性質。最好從一些文檔,參考或教程開始。 (請注意,SO不在之前的列表中。) – 2012-11-05 05:53:21

回答

1

是,glPushMatrix將當前matrixmode(GL_PROJECTIONGL_MODELVIEW等),以一個矩陣堆棧,glPopMatrix彈出第一個回的當前矩陣。每個矩陣模式都有獨立的堆棧。

它看起來並不有一個老不夠正式的OpenGL手冊頁對這個方法的文檔,但是這個網站上來的第一批成果之一,並且包含相同的文字:http://www.manpagez.com/man/3/glPushMatrix/

根據這一頁面,它看起來像GL_MODELVIEW堆棧保證至少有32個矩陣深,其他所有至少2深。在現代卡上,他們可能要高得多。你可以通過調用glGet與堆棧深度適當的參數,即GL_MODELVIEW_STACK_DEPTHGL_PROJECTION_STACK_DEPTH等輪詢的確切數字

此外,矩陣堆棧被廢棄很久以前有利於用戶管理的矩陣。如果你正在編寫一個小程序或者只是學習,那麼使用已棄用的OpenGL就完全沒問題。就像OpenGL矩陣的完整性一樣,我覺得應該提及它。