2011-08-14 148 views
2

我有點困惑,我需要移動我的基本正方形。我應該使用我的翻譯矩陣還是更改對象頂點。哪一個是準確的?移動對象Opengl Es 2.0

我使用頂點着色器 gl_Position = myPMVMatrix * a_vertex;

,也是我使用VBO

+0

由於你是新來的人,一定要告訴你自己關於接受和投票功能。 –

回答

1

不要改變所有頂點的移動對象!那麼一個擁有數千個頂點的複雜模型呢?即使它是一個簡單的方塊,也不要發展這種不好的做法。這正是轉換矩陣的用途。您已在着色器代碼中使用轉換矩陣。從命名我假設它是預乘模型 - 視圖 - 投影矩陣。所以它由定位世界空間中的對象的模型矩陣(這裏是你的翻譯通常應該進入的位置),視角矩陣將世界定位在眼睛/相機空間中(有時模型和視圖矩陣被組合成單個模型視圖矩陣,就像在固定函數GL中)以及投影矩陣對裁剪體進行任何類型的透視投影和/或變換,所有三個一起乘以P * V * M。如果對這些變換矩陣及其使用還存在一些問題,一些關於3D轉換的文獻或者您最喜歡的OpenGL教程。

3

從準確性的角度來看,兩種方法都差不多。

從性能的角度來看,它是關於最小化瓶頸: 對於單個正方形,您可能無法測量任何差異,但是當您考慮大約100萬個正方形(或三角形)時,認爲會稍微複雜一些:

如果你所有的三角形相對於彼此改變位置,你最好改變vbo,因爲你可以將數據直接推送到顯卡的內存,而不是有一百萬個OpenGl調用(它們是非常慢)。

如果你所有的三角形相互之間保持相同的位置(就像正常的三維模型一樣),你應該改變變換矩陣。在這種情況下,您不必再次將數據推送到gfx存儲器,並且只有一個函數調用,並且您只將幾個字節的數據傳送到gfx存儲器。

根據您的應用程序,將三角形劃分爲不同類別並適當更新它們可能是一個不錯的選擇。

+1

+1比我的回答好得多。 –