2012-06-02 21 views
2

例如,如果我想要做這樣的事情:如何在OpenGl中動態添加頂點?

createTriangle(1.0,1.0); // Create triangle at (1,1) 

我將如何做到這一點的代碼?我很舒服硬編碼,但如果我想動態地做到這一點,我怎麼綁定和填充我的緩衝區,然後綁定它顯示?我只是將頂點添加到一個大緩衝區?但是,我如何對不同的對象進行不同的轉換?

編輯:爲了澄清我問我如何創建頂點,然後將它們插入圖形管道。

+0

你的意思是,VBO? – therealszaka

+1

我強烈建議[本電子書](http://www.arcsynthesis.org/gltut/)。 – 2012-06-02 20:56:56

+0

我建議你不要太擔心這些問題。如果你想繪製三角形,只要畫出它,如果你不需要,就不要製作超級超級體系結構。無論如何,你可以用這個三角形創建一個緩衝區,存儲id,然後通過着色器翻譯它。 – therealszaka

回答

0

你可能應該沒有一個大的緩衝區,而是多個共享公共事物的緩衝區,比如着色器,轉換等。保持緩衝區數量是一個使圖形運行速度更快的好方法。

+0

嗯,但可以說我創建了3個三角形並將它們全部添加到相同的緩衝區中。我不能獨立地改變每個三角形的位置嗎? –

+0

呃,不 - 是的。您放置的每個繪圖批次(很可能是每個頂點緩衝區)都將通過某種機制(三角形條,三角形扇等)來繪製爲網格。每個頂點位置,每個頂點的正常位置,顏色紋理等都可以通過頂點着色器(做對象旋轉,縮放,效果,紋理,光照等)單獨進行更改。頂點着色器並不是真正的高層次,因爲你可以寫很多C++來改變三角形。但是參數可以通過着色器。 –

2

如果你想製作一款遊戲,只需要做:)解決問題,沒有一個,是一個問題!您是否計劃過架構,並且有在場景中表示對象的想法及其組件(物理,圖形)?如果是這樣,你可能有代碼的地方,你初始化場景(所以讓我們在那裏創建緩衝區),並讓'引擎'對象(或只有你有主要/渲染/動畫/循環)繪製所有這些。根據對象和你有多少個models/3d/2d,你可以將緩衝區的id存儲在對象中(正在繪製,並且在渲染循環中,引擎對象綁定緩衝區),或者只是簡單地存儲在引擎中'對象。

一切都取決於你正在製作什麼遊戲以及你在什麼規模上遇到什麼問題(例如,在這種情況下,你可以創建一些更大的對象管理器,包含對象組等等)。問題是:do你真的需要這些嗎?他們可能會犯更多的錯誤,並且需要更多的時間來維護代碼,並且最終你將不得不再次編寫這個模塊。)不要讓你不需要的結構。

有一條規則可以指導您:「儘可能簡單,但不簡單」。製作遊戲,而不是你想要的架構,只是因爲UDK有架構。

+0

嗯,你讓我想,如果我想讓一個單獨的物體可以在將它們傳遞給頂點着色器之前轉換它們的頂點?我正在努力如何整合創建頂點,然後將它們插入到圖形管道中。 –