OpenGL喷泉模拟

时间:2012-12-10 17:48:47

标签: c++ opengl simulation

我的任务是创建一个水粒子和水面碰撞的喷泉模拟。到目前为止,我已经使用一个着色器创建了水面,另一个着色器创建了喷泉粒子(喷泉粒子的着色器也使用了变换反馈机制)。

我的问题是:如何制作/检测喷泉颗粒和水面碰撞? - 我想知道,如何从平面的着色器/ GL缓冲区和粒子的着色器/ GL缓冲区获取/连接信息以进行碰撞 - 我知道水波方程和碰撞检测方法 - 我只是不知道是什么允许OpenGL的API。

2 个答案:

答案 0 :(得分:4)

您所描述的问题与OpenGL的职位描述不符。 OpenGL是一个绘图API,其目的是绘制漂亮的图片。碰撞检测等问题完全超出了OpenGL的范围。

但是,您可以使用OpenGL实现基于图像的算法,以执行与您的问题相匹配的基于图像的测试。在您的情况下,我会在正交投影中从顶部渲染水面,然后渲染每个粒子并启用深度测试。使用遮挡查询我将测试粒子是否仍然可见。对于每个帧,我会比较粒子可见性是否发生变化:如果它消失,它就会进入水下并发生碰撞。

这种方法有效,但坦率地说,我说这完全是过度设计的。只需测试地上的颗粒高度是否大于平均水位;对于小的波纹波,这是足够准确的。

答案 1 :(得分:0)

您需要做的是研究OpenCL与OpenGL互操作的可能性。查看here以获取使用OpenCL(使用OpenGL渲染)显示粒子碰撞模拟的nVidia样本。 OpenGL作为一个计算API是非常有限的,你很难做到你想要的而不跳过篮球(我想是可能的 - 只是不是很容易)。