2010-04-13 137 views
0

設置ModelView矩陣時,您通常會經歷來自單位矩陣的多次轉換。例如:使用旋轉,平移等設置ModelView矩陣。vs設置手動矩陣

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(270.0f, 0.0f, 0.0f, 1.0f); 
glTranslatef(-rect.size.height/2, -rect.size.width/2, 0.0f); 

代替其他後做這些操作中的一個的(假設有多於兩個),它不會是更有效的方法簡單地預先計算所得的矩陣和模型視圖矩陣設置爲此手動矩陣?

回答

1

當然,只要轉型不會改變。例如,如果用戶可以用鼠標移動和旋轉物體,那麼您將不得不重新計算矩陣。在這種情況下,你可以讓OpenGL爲你做。另外,除非你遇到性能問題,否則我會傾向於不用擔心效率,只是堅持用任何一種方法來保持你的代碼更簡單,這可能會指定單獨的轉換。

0

雖然我不完全確定,Jeff Lamarche出色的「從頭開始的OpenGL」教程似乎表明矩陣乘法會在CPU上出現。見tutorial number 7

如果你仍然試圖讓事情儘可能快,他的文章有一些使用iPhone矢量處理器的代碼(想一下桌面上的SSE1/2/3/4),以加快代碼速度7倍(從運行時的0.7%到Shark的0.1%)。

但是,性能增加可能不值得,尤其是在代碼可讀性方面。如果你希望你的代碼儘可能快地運行,那就去做吧,但是如果沒有的話,考慮保持庫轉換,以便其他人可以找出你的代碼中發生了什麼。每個在iPhone上使用OpenGL的人都會識別glTranslatef(x,y,z),但也許不是mTranslate(worldview, makeMat(...))