2013-03-17 57 views
1

我想使用球體和柱體渲染彈簧。每個氣缸在每一端有兩個球體,所有氣缸都沿彈簧中心線放置。我可以做到這一點,並渲染是好的。我目前正在使用gluSphere和gluCylinder來做它。合併球體和柱體

現在,當我看着它的表現不好,它很慢。所以我想知道以下幾點是否可行:

是否有可能將球體和圓柱體的表面組合起來,只渲染球體的外表面而不是球體的內部覆蓋部分......?

我也讀了關於VBOs ..是否有可能使用gluSphere和gluCylinder與VBOs ..? 我無法使用顯示列表,因爲彈簧的屬性不斷變化......!

任何人都可以提出更好的建議嗎?

回答

3

您可能想重新考慮您繪製彈簧的方式。在我看來,有兩種有效的方法。

  1. 負載使用Assimp彈簧模型,或者是容易使用OpenGL集成了一些其他型號的加載軟件。免費的3D模型可以在Turbo Squid或通過Google的3D倉庫找到(在Google Sketch-Up中)。

  2. 純粹在OpenGL中繪製對象。使用Post固定功能OpenGL流水線繪製這種對象的慣用方法是繪製立體3D線條。您繪製的曲線越多,您可以以渲染時間爲代價將曲線賦予更大的曲率。

    對於繪製彈簧,我建議您定義一組定義彈簧形狀的點(具有相鄰性),並使用基本類型GL_LINE_STRIP_ADJACENCY繪製這些點。然後,在着色器程序中使用幾何着色器將這個像素綁定線條展開爲一組由三角形條組成的三維體積線。

    This博客文章給出了一種很好的技術描述。

+1

+1爲Mitchell和Web引用和鏈接,非常酷。 – Skurmedel 2013-03-17 19:28:22

+1

很高興幫助。 BMXBandit拯救! – 2013-03-17 19:34:27

+0

@Sir Digby Chicken Caesar ...感謝您的建議......我認爲第二個更適合我......在這種方法中,我不太清楚你提到的着色器的東西......但我會看看它。 – AdityaG 2013-03-17 19:41:28

1

您最好的選擇很可能會採取快速教程在任何3D建模軟件(Blender想到的),然後你的春天在其靜止使用CSG操作姿勢建模。

這種方法不僅可以擺脫冗餘原語,還可以很容易地將您的模型與VBO結合使用。所有你需要做的就是解析Blender的輸出文件(最簡單的將是.obj),檢索充滿頂點數據(位置,法線,可能是紋理座標)的數組。

最後,要爲您的彈簧「設置動畫」,您可以使用頂點着色器。你只需要通過另一個制服來描述彈簧變形的程度,然後進行其餘的轉換。