2012-03-01 47 views
0

我在Xcode中查看OpenGL ES 2.0的模板,我注意到Apple在每幀之前創建了一個新的透視矩陣和一個新的變換矩陣。我也在教程中看到這個。當我在其他平臺上使用OpenGL時,我只需創建一次矩陣。蘋果爲什麼要讓你每一幀都製作一個新的?新視角+變換矩陣的每一個更新?

回答

0

在複雜的應用程序中,有幾個方法來處理OpenGL的狀態:

1)有一個政策,每一個改變OpenGL的狀態函數或方法必須將其設置回它是什麼,他們做了什麼之前

2)每個函數或方法設置狀態,他們希望它被假定一無所知的存在狀態是什麼

3)你跟蹤的狀態和函數和方法可以在本地檢查並設定只什麼他們需要

在情況1中,如果有人忘記遵循該政策,則會發生錯誤並難以追查。而且,獲取當前狀態對於某些狀態位可能是昂貴的。

在情況2中,您花時間設置狀態可能不需要。不過,這通常不會太糟糕。

在情況3中,您花費了大量精力和內存跟蹤OpenGL已經保存的狀態。這是昂貴的和容易出錯的。

所以通常我會去#2。這對我來說是最少的工作量,並且在大多數情況下具有相當不錯的表現。你的旅費可能會改變。

+0

你的意思是重置它之前呈現#2的每個模型?如果是這樣,那麼之前的轉換呢? – 2012-03-01 20:12:14

+0

這完全取決於你想要做什麼。在我所研究的應用程序中,通常有很多我們使用OpenGL進行渲染的東西。所以我們可能會渲染一個模型,然後繪製一些屏幕控件。對於屏幕控件,我們通常需要對模型進行不同的轉換。但是你可能會在每個模型的基礎上重置諸如'glColor *()'或'glLineWidth()'之類的東西。這取決於你的具體情況。 – user1118321 2012-03-01 20:36:49