2013-08-17 116 views
2

使用GLE管材和擠出庫(http://www.linas.org/gle/),我可以使用OpenGL將二維數據拉伸到3D對象中。該庫執行CPU上的所有工作並使用OpenGL即時模式。使用幾何着色器的OpenGL幾何體擠出

我猜想使用幾何着色器在GPU上進行擠壓可能會更快,特別是在渲染大量幾何時。由於我還沒有任何OpenGL幾何着色器的經驗,我想知道這是否可能以及我必須注意什麼。你認爲將這些計算轉移到GPU是一個好主意,它會提高性能?也可以使用「渲染到VBO」來將渲染後的幾何體從GPU中返回到CPU。

+2

爲什麼你想用幾何着色器來做到這一點?如果您認爲這將比CPU方法更快,您應該重新考慮這一點。 –

+0

我想在GPU上它可能會更快。你不覺得嗎? – trenki

+0

你到底在做什麼?輸入是否會改變每一幀?怎麼樣?使用幾何着色器時,擠出本身(幾何體生成)可能會更快,但渲染擠出幾何體可能不會。 –

回答

1

如果幾何確實會改變每一幀,您應該在GPU上進行。
請記住,不依賴於即時模式的其他解決方案將比現在更快。您甚至可能不需要在GPU上執行此操作。

但是,也許你想使用陰影映射,而不是在某些情況下更有效。它也可以爲像草一樣的alpha測試對象渲染陰影。 但是,看起來您確實需要最終的陰影幾何圖形,所以我不確定這是否適合您。

現在回到陰影卷。
使用幾何着色器從網格中提取陰影輪廓是一個非常複雜的過程。但是互聯網上有足夠的信息。

下面是Nvidia公司的一篇文章,其中詳細解釋了流程:
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch11.html

這裏的另一種方法(2003年),它甚至不需要幾何着色器,這可能是在低端硬件有趣:
http://de.slideshare.net/stefan_b/shadow-volumes-on-programmable-graphics-hardware

如果你並不需要最有效的解決方案(使用陰影輪廓),你也可以簡單地提取它自己的網格的每個三角形。使用幾何着色器非常簡單。在嘗試在GPU上實現輪廓提取之前,我會嘗試一下。

關於你的問題的「渲染到VBO」部分:
據我知道有沒有辦法讀取幾何着色器的輸出回CPU。不要在此引用我的話,但我從來沒有聽說過這樣做的方法。

+2

我可以用'變換反饋'讀回幾何着色器的輸出 – Sam

+0

我知道變換反饋,但是你真的可以讀回輸出到CPU嗎?如果是的話,你知道有關這方面的任何鏈接嗎?我找不到任何東西。 – Tara

+0

輸出寫入常規緩衝區。讀回到CPU就像使用頂點數組緩衝區。唯一的區別是額外的緩衝區綁定目標'GL_TRANSFORM_FEEDBACK_BUFFER'。但是,可以輕鬆地將輸出緩衝區重新綁定爲用於渲染的頂點數組緩衝區。 HTTPS://www.opengl。org/wiki/Transform_Feedback#Buffer_binding |使用變換反饋的實例剔除:http://rastergrid.com/blog/2010/02/instance-culling-using-geometry-shaders/ – Sam