2013-02-12 106 views
0

我被要求繪製一個三維四面體,並使其圍繞x,y或z軸旋轉,具體取決於輸入給定。現在我有2個問題。圍繞其中心旋轉opengl四面體?

1)我用GL_TRIANGLES(4個三角形)繪製了我的四面體。這是繪製將被轉換的基元的更好方式嗎?我相信(從我見過的其他問題),軸旋轉是關於轉換爲特定的軸,類似於(0,-y,-z),然後圍繞該軸旋轉並最終轉回。現在好了,翻譯的價值應該是什麼? y,z?我有很多代表每個頂點的值,我是否將它們全部翻譯?

回答

0

我認爲這將是更快地只寫完整的答案多問了很多問題:

  1. 爲了緩解和速度了一點東西,使用GL_TRIANGLE_FANGL_TRIANGLE_STRIP代替。

  2. 取決於你所使用的管道:

    2.1老的Op​​enGL(< 2.0,shaderless)

    你不應該翻譯,用手旋轉它們。使用適當的glRotateglTranslate函數。您需要傳遞給這些函數的值顯然與您的對象的期望位置和旋轉有關;你會在文檔中找到更多關於它們的信息。

    2.2可編程管線

    創建的變換矩陣(通過自己或通過使用庫如GLM),並將其傳遞作爲均勻到頂點着色器。

噢,你不轉化爲一個軸線。將當前視圖矩陣乘以適當的旋轉矩陣。

在挖掘更復雜的主題之前,您應該嘗試閱讀更多內容。 This tutorial包含了很好的現代OpenGL;如果您不得不使用舊的OpenGL,請參閱NeHe tutorials

+0

關於1.)現代GPU針對索引三角形渲染進行了優化,因此在GL_TRIANGLES和其他GL_TRIANGLE_原語之間沒有明顯的性能差異(如果使用VBO,需要一些嚴重的角落情況才能獲得一些可測量的差異)。如果使用客戶端頂點陣列,可測量的差異主要來自系統總線的帶寬限制效應。 – datenwolf 2013-02-12 15:54:08

+0

@datenwolf「**緩和**和速度」。想想5? 6?頂點而不是12.它肯定不會*變慢*。 – 2013-02-12 15:55:20

+0

如果要用照明繪製四面體,那麼您可以回到12個頂點,就像每個面有不同的頂點一樣(頂點是位置,法線和其他屬性的整個元組)。 – datenwolf 2013-02-12 16:19:05