2013-02-09 72 views
2

停留在原點,所以我學習OpenGL和一件事我覺得很奇怪的是,相機有留在原籍,並期待在同一方向。要實現相機的移動和旋轉,您必須移動並旋轉整個世界而不是相機。爲什麼相機必須在OpenGL

我的問題是,爲什麼你不能移動相機? directx是否允許您移動相機?

回答

5

這是一個有趣的問題。我認爲答案取決於你實際上的意思,當你談論一個固定的相機。

由於事實上與其說openGL的具有固定相機,我寧願往往會說沒有任何相機都在OpenGL。

另一方面,我不同意你的解釋,即openGL API移動或旋轉世界。

相反,我會說openGL API不會移動或旋轉世界。

我認爲在openGL API中沒有任何相機概念的原因是,因爲它不是一個高層次的抽象層,而是與顯示計算機圖形的計算需要相關聯。

正如我建議您主要討論的是顯示三維場景,這意味着將3D頂點數據轉換爲二維光柵圖像。

對於渲染每一幀這涉及變換轉化每個頂點的3 d座標場景在屏幕上其對應的二維位置。

由於每個頂點都必須放置在屏幕的正確位置,所以如果您在概念上移動像相機一樣的東西或者只是移動整個世界,它就不會產生任何計算差異,您必須執行儘管如此,同樣的轉變。

計算屏幕頂點「右」位置所涉及的數學知識可以通過稱爲矩陣的數學對象來描述,該矩陣在應用時(用於該應用的數學術語是矩陣乘法)應用於3D數據將導致所需的2D屏幕座標。

所以基本上在渲染3D場景時會發生什麼 - 不管事實上是否有任何攝像頭 - 是否每個頂點都由某個變換矩陣進行處理,從而保留了原始3D數據頂點完好無損。

由於3 d頂點數據沒有得到根本改變,我想說的openGL的不移動或旋轉的世界可言,但這種「觀察」可能取決於觀察者的角度。

事實上離開3 d頂點數據完好無改變這一切是必要的,以防止變形,由於累積的舍入誤差的3 d場景的問題。

我希望我可以表示我對誰或什麼動作的對象時,或者爲什麼在OPENGL API接口的opinon幫助。

即使我不能convice你有沒有字移動參與用OpenGL API不要忘記一個事實不加權任何東西所以移動它不應該是太痛苦了。

順便說一句。不要刻意去調查有關在你的問題中提到的專利庫,並保持依靠開放標準。

2

移動世界和移動相機有什麼區別?在數學上......沒有任何;無論哪種方式都是相同的數字。這都是一個觀點問題。只要你正確地編碼你的相機抽象,你不必認爲它是如果你不想移動世界。