我有一个关于如何渲染表面粒子的非常具体的方法的问题。该方法在Nvidia GPU Gems 3第7章“GPU上基于点的元数据可视化”( 链接到本章 )中得到了很好的解释。
本文是关于使用均匀分布在表面上的点或碎片来绘制隐式曲面。他们说这些粒子的计算完全是在GPU上完成的。只有定义表面的数据从CPU发送到GPU,以保持尽可能低的流量。
他们还给出了一些伪代码示例片段着色程序来计算粒子的位置、速度等,对我来说,这些程序应该对每个粒子运行一次。
现在我的问题是,它们是如何储存这些粒子的?它是什么样的数据结构?它必须是某种类型的缓冲区或纹理,可以用来读取和写入GPU上的操作。但是,如何在下一个呈现步骤中再次呈现此缓冲区/纹理?
我的第一个想法是某种顶点缓冲区对象,它在开始时发送到GPU一次,并在每次呈现过程中不断更新。有可能吗?
我的一个要求是它必须用OpenGL/GLSL来实现,我希望这是可能的。
发布于 2014-05-22 03:48:28
是的,您需要某种VBO并重复传递相同的数据。数据结构可以是SoA (数组结构)或AoS ( structure ),这取决于您喜欢如何编码对数组不同属性的访问,即:
SoA:
AoS:
您可以使用VBO或纹理,唯一的区别是缓存的方式,因为纹理是为2D访问优化的。
呈现是按步骤进行的,就像您想象的那样,所以您所需要做的就是使用着色器“呈现”系统的物理步进,这些着色器计算您想要的属性,然后将相同的结构绑定到后续步骤中的真实图形呈现。
https://stackoverflow.com/questions/23803151
复制相似问题