我被要求繪製一個三維四面體,並使其圍繞x,y或z軸旋轉,具體取決於輸入給定。現在我有2個問題。圍繞其中心旋轉opengl四面體?
1)我用GL_TRIANGLES(4個三角形)繪製了我的四面體。這是繪製將被轉換的基元的更好方式嗎?我相信(從我見過的其他問題),軸旋轉是關於轉換爲特定的軸,類似於(0,-y,-z),然後圍繞該軸旋轉並最終轉回。現在好了,翻譯的價值應該是什麼? y,z?我有很多代表每個頂點的值,我是否將它們全部翻譯?
我被要求繪製一個三維四面體,並使其圍繞x,y或z軸旋轉,具體取決於輸入給定。現在我有2個問題。圍繞其中心旋轉opengl四面體?
1)我用GL_TRIANGLES(4個三角形)繪製了我的四面體。這是繪製將被轉換的基元的更好方式嗎?我相信(從我見過的其他問題),軸旋轉是關於轉換爲特定的軸,類似於(0,-y,-z),然後圍繞該軸旋轉並最終轉回。現在好了,翻譯的價值應該是什麼? y,z?我有很多代表每個頂點的值,我是否將它們全部翻譯?
我認爲這將是更快地只寫完整的答案多問了很多問題:
爲了緩解和速度了一點東西,使用GL_TRIANGLE_FAN
或GL_TRIANGLE_STRIP
代替。
取決於你所使用的管道:
2.1老的OpenGL(< 2.0,shaderless)
你不應該翻譯,用手旋轉它們。使用適當的glRotate
和glTranslate
函數。您需要傳遞給這些函數的值顯然與您的對象的期望位置和旋轉有關;你會在文檔中找到更多關於它們的信息。
2.2可編程管線
創建的變換矩陣(通過自己或通過使用庫如GLM),並將其傳遞作爲均勻到頂點着色器。
噢,你不轉化爲一個軸線。將當前視圖矩陣乘以適當的旋轉矩陣。
在挖掘更復雜的主題之前,您應該嘗試閱讀更多內容。 This tutorial包含了很好的現代OpenGL;如果您不得不使用舊的OpenGL,請參閱NeHe tutorials。
關於1.)現代GPU針對索引三角形渲染進行了優化,因此在GL_TRIANGLES和其他GL_TRIANGLE_原語之間沒有明顯的性能差異(如果使用VBO,需要一些嚴重的角落情況才能獲得一些可測量的差異)。如果使用客戶端頂點陣列,可測量的差異主要來自系統總線的帶寬限制效應。 – datenwolf 2013-02-12 15:54:08
@datenwolf「**緩和**和速度」。想想5? 6?頂點而不是12.它肯定不會*變慢*。 – 2013-02-12 15:55:20
如果要用照明繪製四面體,那麼您可以回到12個頂點,就像每個面有不同的頂點一樣(頂點是位置,法線和其他屬性的整個元組)。 – datenwolf 2013-02-12 16:19:05