我正在用OpenGL ES 1.x開發一個適用於Android的小型應用程序。沒有glBegin-glEnd功能,因此必須爲要繪製的對象定義頂點(以及顏色和texcoord)數組,然後使用矩陣運算來移動,縮放和旋轉它們。這對大型物體很好,沒什麼可抱怨的...在Android中繪製臨時對象的最佳方式OpenGL ES 1.x
但是,如果想繪製小的「臨時」對象(例如,從A點到B點的一條線),事情會變得有點煩人。因此,我創造了一些小的實用功能,如:
DrawHelper.drawLine(起點,終點)
我注意到兩種方法可以做到這一點。我的問題是哪個版本更受歡迎?既然我們正在處理這樣簡單的幫助函數,並且這兩種方法都很容易理解,那麼即使潛在的速度增益很低,也可能從一開始就寫得儘可能好。所以,請沒有 「標杆和第一識別瓶頸」 .. =)
方法1:
抽籤助手有包含點(0,0,0)和(1,0,0)FloatBuffer。我每次用適當的模型視圖矩陣繪製這條線,將兩個點轉換到所需的位置。
方法2:
抽籤助手有一個虛擬FloatBuffer我用FloatBuffer.put在新的點,每次喂。
方法1對於較大的對象(如圓或其他幾何形狀)顯然更好(?)。簡單的線條或簡單的三角形如何?
謝謝,我會記住這一點,但我不確定你的論點是否適用於所有情況。假設你想在不同的位置多次繪製一個簡單的正方形。我從別處讀到的內容表明,最好不要改變緩衝區的內容,而是在OpenGL中轉換位置。當然,我也無法證實這是正確的。 (另外,可以想象glTranslate被優化爲只發送3個參數,我不知道..) –
@ user2582805:對於多個位置的問題,您可以使用實例化。不,沒有對glTranslate進行優化。 glTranslate始終在CPU上運行,並在堆棧上的當前4×4矩陣上相乘,然後必須將其傳輸到GPU。 – datenwolf
好吧,我想我會和那個一起去的。謝謝! –