2015-06-18 63 views
0

平局顆粒我讀的文章"Particles/Instancing"OpenGL的:在同一時間

這裏的報價:

顯然,我們需要一種方法來繪製所有的粒子在同一時間。

有很多方法可以做到這一點;這裏有三個:

(a)生成一個單一的VBO,其中包含所有的粒子。簡單,有效, 適用於所有平臺。

(b)使用幾何着色器。不在本教程的範圍內,主要是 ,因爲50%的計算機不支持此操作。

(c)使用實例化。不適用於所有電腦,但絕大多數都是 。

是的,(a)是同時實施的。 (c),我認爲glDrawArraysInstanced等於一個glDrawArrays循環。 它是真正的同時執行嗎? (b),我認爲我們可以使用頂點具有相同的效果。

回答

0

對於實例化,glDrawArraysInstanced與調用glDrawArrays多次,但是,如果你的驅動有真正的實例化支持(幾乎所有的臺式機GPU驅動程序會,和許多手機),那麼它將執行顯著更好相同的視覺效果。這種節省是由於CPU和GPU之間的數據傳輸較少以及GL API調用較少所致。

這些天,幾何着色器也在絕大多數桌面GPU驅動程序上 - 文章已有幾年了。移動採用速度較慢,因爲它不是GLES 3.0的核心功能。一般來說,粒子是廣告牌四元組(4個頂點),但頂點可以通過具有單個點的幾何着色器和一些元數據生成,而不是將所有4個頂點放入VBO。這只是減少了從CPU到GPU的數據傳輸大小。

+0

謝謝。是的,方法(c)的確速度更快。但是我想知道:它是否是真正的同時實現?我不這麼認爲。因爲每一次,我們只繪製一小塊像素,比如幾個像素。我更喜歡一種真正並行實現的方法。我認爲方法(b)是真正平行的。實際上,我們可以設置不同的單個補丁,比如每個對象需要一個三角形頂點,在頂點着色器中,對於每個三角形頂點,我們設置一組紋理座標。我認爲這樣的一組頂點和片段着色器可以實現許多小對象渲染的真正並行實現。 – user1914692

+0

如果它們得到支持,它們都可能在GPU驅動程序級別上實現,並且它們的性能將取決於該實現,並且可能因驅動程序而異。 – MuertoExcobito