2009-09-27 57 views
2

我正在嘗試編寫一個處理很多圈子的遊戲(好吧,三角粉絲,但你明白了)。每個圓圈都有一個x位置,一個y位置和一個質量屬性。每個圈子的大衆財產都會有所不同。另外,我想讓一些不同組的圓圈着色,同時保持透明的圓心,並沿着圓圈的周邊漸漸變得不透明。如何使用頂點緩衝區對象渲染多個不同的圓圈?

我被告知要使用VBOs,並且一直在谷歌搜索。我想就如何繪製這些圈子和解釋維也納組織的工作方式提供一個完整的例子,同時保持簡單的解釋。

回答

3

我還沒有實現自己的VBOs,但從我的理解,他們的工作類似於紋理對象。事實上,當我提醒自己並向其他人解釋什麼是VBOs時,我不太願意調用紋理對象的紋理緩衝區對象,以加強概念上的相似性。

(不要與buffer textures從NVIDIA指定的擴展GL_EXT_texture_buffer_object混合。)

讓我們想到:什麼是紋理對象?它們是使用glGenTextures()生成的對象。 glGenBuffersARB()做類似的事情。類比適用於glBindTexture()glBindBufferARB()

(和OpenGL 1.5,功能glGenBuffers()glBindBuffer()已進入核心OpenGL的,所以你可以在地方的延伸當量的使用它們。)

但究竟什麼是這些「紋理對象」,什麼他們做什麼?那麼,請考慮一下,實際上,您可以在每個幀中使用glTexture2D()來設置紋理。紋理對象僅用於減少GPU和主內存之間的流量;代替發送整個像素數組,您只發送您知道爲靜態的紋理對象的「OpenGL名稱」(即整數標識符)

VBOs服務於類似的目的。您不必一遍又一遍地發送頂點數組,而是使用glBufferData()上傳數組一次,然後僅發送對象的「OpenGL名稱」。它們非常適合靜態對象,對動態對象來說不是那麼好。事實上,許多通用的3D引擎(如Ogre3D)爲您提供了一種指定網格是動態還是靜態的方法,很可能是爲了讓您在VBO和頂點數組之間做出決定。

爲了您的目的,維也納國際中心是不是正確的答案。你需要許多不斷變形和變化的簡單物體。簡單來說,我指的是頂點少於200個的頂點。除非你打算編寫一個非常智能和複雜的頂點着色器,否則VBO不是就是。你想要使用頂點數組,你可以很容易地從主CPU處理並更新它們的每一幀,而不需要特別調用圖形卡來將整個VBO重新加載到圖形卡上(這可能比發送頂點數組慢)。

這是一個非常好的來自nVidia about VBO API的「手冊頁」。閱讀更多信息!

+0

謝謝!我想我會看看Vertex Arrays。 – Eddie 2009-09-30 10:16:08

+0

@NicolBolas 1)我喜歡儘可能支持GL的早期版本。所以我不同意使用擴展名或者將函數的起源作爲擴展名是一個問題。我認爲應該感謝今天的擴展大多無處不在。 2)另一方面,這看起來很不錯。我不知道緩衝區紋理的存在。不過,對於使用即時模式或頂點陣列的人來說,使用紋理進行類比仍然有助於理解VBO。我會做一個小小的編輯。 – 2012-11-17 10:54:06

+0

@NicolBolas我已閱讀文本。這確實是一團糟,尤其是考慮到NVIDIA寫的擴展指定緩衝區紋理的名稱。我還添加了核心GL功能。希望現在好一點。感謝您的輸入! – 2012-11-17 11:05:44

1

good vbo tutorial

你在做什麼看起來像粒子,你可能想谷歌「粒子渲染」以防萬一。

相關問題