2013-08-17 168 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