2011-01-30 82 views
2

我有一個八角形,我需要旋轉並翻譯到10,000個不同的位置/角度。角度和座標動態變化。快速旋轉和平移不使用glRotate/glTranslate

  1. 如果我在即時模式下使用glRotate和glTranslate,這將是由於所有的來回客戶端之間/服務器速度太慢。

  2. 如果我在顯示列表上使用glRotate和glTranslate,它會很快,但我避免顯示列表,因爲它已被棄用。

  3. 如果我使用VBO,我必須預先旋轉並預先轉換CPU上的八角形,然後才能將其上傳到服務器內存。這工作,但需要大量的CPU時間。

所以我想知道...有無論如何翻譯/旋轉存儲在VBO中的頂點,而不訴諸於基於CPU的計算。是否有執行存儲在服務器內存中的旋轉/轉換值的VBO等效項?我真的很喜歡GPU做所有的計算,並從我所有的trig函數中釋放CPU。

+0

哦,男人,我打算提出一個聰明的答案,但我完全忘了帶一個八角形! – 2011-01-30 17:54:43

+0

是的,我的問題是,每個翻譯/旋轉命令將在8 vertice對象(而不是每個調用5000頂點VBO)上工作。這不是有效的做事方式。命令滯後將超出渲染時間。 – Gary 2011-01-31 01:55:33

回答

3

我會使用VBO和常規glRotateglTranslate(或使用glUniformMatrix爲頂點着色器提供矩陣)。我不認爲這會降低渲染速度!

3

您可以使用GLSL編寫處理轉換的着色器。但是,您需要以某種方式使着色器可以使用轉換矩陣。

如果你用2D做這件事,遊戲開發堆棧交換中存在類似的問題(對於四邊形,但理論相同):Basics of drawing in 2D with OpenGL 3 shaders

請注意,該問題的第二個答案,它提供了更多的細節,有一個鏈接到OpenGL.org有一個壞錨。我相信它應該鏈接到Instanced arrays

快速谷歌搜索後發現的實例化示例:Shader instancing。在本教程中,您可能希望查看頂點着色器,以查看使用紋理緩衝區應用的用於存儲矩陣的變換矩陣的示例。示例代碼是Delphi,但它應該是可讀的。該網站使用德語,但您始終可以使用Google翻譯。