OpenGL镶嵌中的每个顶点计算


9

我尝试使用硬件镶嵌来实现基于位置的布料模拟。这意味着我只想将控制四边形上载到图形卡,然后使用镶嵌和几何着色在布料中创建节点。

这个想法遵循本文:

David Huynh,“使用硬件镶嵌细分的布料模拟”(2011年)。论文。罗彻斯特理工学院 http://scholarworks.rit.edu/theses/265/

我知道如何使用镶嵌来创建模拟点。我不知道如何将计算出的信息存储到帧缓冲区中。

几何图形以及镶嵌评估着色器具有每个顶点计算所需的信息。但是它们可以直接写入帧缓冲区吗?

我知道的片段着色器可以写入帧缓冲区,但是我的信息将被插值,并且我不再知道在哪个位置写入什么内容。


变换反馈缓冲区
棘轮怪胎

听起来很好。布料模拟的约束条件使我有必要访问粒子的所有邻居(以计算弹力)。可以使用此类缓冲区吗?在几何着色器中?为了防止反馈缓冲区多次打印每个顶点,我想使用GL_POINTS。乍看之下,这似乎使计算弹簧变得更加困难。
Dragonseel

Answers:


3

基于“棘轮怪胎”的评论,我研究了变换反馈缓冲区,并以此方式解决了我的问题。

现在,我在CPU上生成模拟点,并将其放入VertexBufferObject中。我为这些点生成了第二个VBO(以及其他一些VBO)。布料的连通性在ivec4中作为顶点属性给出。

使用转换反馈缓冲区和使用两个VBO的Double-buffering技巧,我始终可以从最后一步读取(使用连接信息)并写入另一个缓冲区。这是为了解决并发问题。

计算在顶点着色器中以GL_POINTS的形式进行。使用附加的索引缓冲区将第一个着色器的输出绑定到另一个常规着色器中,以生成三角形,我可以毫无困难地以任意方式渲染布料。

这个想法遵循了“ OpenGL Superbible”一书(http://www.openglsuperbible.com/)中的变换反馈缓冲区示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.