2012-11-19 25 views
3

繪製幾何服用標準的OpenGL 4.0+功能&規格考慮;我見過的幾何結構和形狀可以在任一兩種方式創建:在OpenGL

  1. 利用的VAO & VBO秒。

  2. 使用着色器程序。

哪一個是創建圖形的標準方式??他們是否一致?或者它們是創建幾何圖形和形狀的兩種不同方式?

+2

幾何形狀着色器可用於修改在硬件上的幾何形狀(例如,[詳細程度(http://en.wikipedia.org/wiki/Level_of_detail)),但它們仍需要輸入數據的工作。 –

回答

4

幾何加載到與VAO & VBO的GPU。

我強烈(如真的強烈)建議您閱讀本http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/

+0

感謝您的回答和參考,到目前爲止,我已經使用着色器來創建形狀,所以你的意思是真正的交易是與VAO和VBO?到目前爲止,我已經使用着色器創建了形狀,這些形狀是一些虛擬模擬形狀? – BulBul

+1

在閱讀關於它們之前,您不會考慮使用幾何着色器。如果您需要在屏幕上繪製某些東西 - 只需上傳並繪製它就可以了:)但是對於您的問題:由幾何着色器生成的幾何體存儲在GPU內存中並注入到GPU管線中。主要優點是大公可以瞬間通過GPU核心產生並行的方式大量幾何形狀的,它並不需要大數據量上傳到GPU(PC總線的瓶頸) – JAre

+2

@BulBul *「到目前爲止,我已經使用用於創建形狀的着色器「* - 不,你沒有,相信我。你所做的是使用着色器從VAO和VBO繪製幾何圖形,這不是排他性的,無論你使用任何着色器改變幾何圖形,你總是需要一個VAO和VBO來上傳任何幾何圖形。 –

4

VAOs和維也納組織如何什麼幾何畫(指定每個頂點的數據)。着色器程序是關於如何繪製它們(哪個程序被應用到每個提供的頂點,每個片段等等)。

1

頂點着色器可以用來取代頂點,或從一個內置式和頂點指數,它可生成它們作爲後來的開放式gl版本的內置屬性。

頂點和幾何形狀着色器之間的區別在於,頂點着色器是一個1:1映射,而幾何形狀着色器可以創建多個頂點 - 可在用於例如詳細代自動電平被用於NURBS或培林基於噪音地形等

2

我見過的幾何結構和形狀可以在任一兩種方式創建:

不會。在現代的OpenGL-4中,你需要數據和程序。

VBOs和VAO包含原始幾何數據。着色器是程序(通常在GPU上執行),將原始數據轉換爲屏幕上的像素。

3

讓我們列出完整的事實。

着色器需要輸入。如果沒有更改的輸入,則每個着色器調用都會生成完全相同的值。這就是着色器的工作原理。當您發出繪圖調用時,會啓動一些着色器調用。 只有變量在此繪製調用中將從調用變爲調用的變量爲in變量。所以除非你使用某種輸入,否則每個着色器都會產生相同的輸出。

但是,這並不意味着你絕對需要一個真正包含東西的VAO。這是完全合法的(雖然有一些不支持它的驅動程序)與不具有any attributes enabled一個VAO渲染(儘管你必須使用陣列的渲染,沒有索引渲染)。在這種情況下,所有用戶定義的頂點着色器輸入(如果有的話)將填入with context state,這將是恆定的。

頂點着色器確實有由系統生成的一些其他的,內置的每頂點輸入。 Namely gl_VertexID。這是OpenGL用來唯一標識這個特定頂點的索引。每個頂點都會有所不同。

所以,你可以,例如,獲取基於該指數通過統一的緩衝區,緩衝區紋理,或一些其他機制幾何數據自己。或者您可以根據索引程序生成頂點數據。或者是其他東西。您可以將這些數據傳遞給曲面細分着色器,以便細化生成的數據。或者對幾何着色器做任何你想要的東西。但是,您希望將該索引轉換爲真實數據取決於您。

Here's an example from my tutorial series that generates vertex data from nothing more than an index