我的任务是创建一个带有水粒子和水面碰撞的喷泉模拟。至此,我已经使用一个着色器创建了水面,另一个着色器创建了喷泉粒子(喷泉粒子的着色器也使用了变换反馈机制)。
我的问题是:如何制作/检测喷泉粒子和水面碰撞?- 我想知道,我如何从平面的着色器/GL 缓冲区和粒子的着色器/GL 缓冲区获取/连接信息以进行碰撞 - 我知道水波方程和碰撞检测方法 - 我只是不知道为什么允许 OpenGL 的 API。
我的任务是创建一个带有水粒子和水面碰撞的喷泉模拟。至此,我已经使用一个着色器创建了水面,另一个着色器创建了喷泉粒子(喷泉粒子的着色器也使用了变换反馈机制)。
我的问题是:如何制作/检测喷泉粒子和水面碰撞?- 我想知道,我如何从平面的着色器/GL 缓冲区和粒子的着色器/GL 缓冲区获取/连接信息以进行碰撞 - 我知道水波方程和碰撞检测方法 - 我只是不知道为什么允许 OpenGL 的 API。
您描述的问题与 OpenGL 的工作描述不符。OpenGL是一个绘图API,它的目的是画出漂亮的图片。诸如碰撞检测之类的事情完全超出了 OpenGL 的范围。
但是,您可以使用 OpenGL 实现基于图像的算法来执行与您的问题匹配的基于图像的测试。在您的情况下,我会在正交投影中从顶部渲染水面,然后在启用深度测试的情况下渲染每个粒子。使用遮挡查询我会测试粒子是否仍然可见。对于每一帧,我都会比较粒子可见性是否发生变化:如果它消失了,它就会进入水下并发生碰撞。
这种方法有效,但坦率地说,我会说它完全被过度设计了。只需测试地面以上的颗粒高度是否大于平均水位;对于小的波纹波,这是足够准确的。
您需要做的是调查 OpenCL 与 OpenGL 互操作的可能性。在此处查找显示使用 OpenCL(使用 OpenGL 渲染)进行粒子碰撞模拟的 nVidia 示例。OpenGL 作为计算 API 是非常有限的,如果不跳槽就很难做你想做的事(我想有可能——只是不太容易)。