c++ - OpenGL 喷泉模拟

标签 c++ opengl simulation

<分区>

我的任务是创建一个带有水粒子和水面碰撞的喷泉模拟。至此,我已经使用一个着色器创建水面,并使用另一个着色器创建喷泉粒子(喷泉粒子的着色器也使用变换反馈机制)。

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

最佳答案

您描述的问题与 OpenGL 的工作描述不符。 OpenGL是一个绘图API,它的目的是画出好看的图。诸如碰撞检测之类的事情完全不在 OpenGL 的范围内。

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

此方法有效,但坦率地说,我认为它完全是过度设计的。只需测试粒子离地高度是否大于平均水位;对于小波纹波,这已经足够准确了。

关于c++ - OpenGL 喷泉模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806327/

相关文章:

c++ - 用 C++ 为当前机器生成 GUID 的简单方法是什么?

python - 使用 boost-asio 的 C++ 和 Python 程序之间的客户端服务器

c++ - OpenGL 改变/重新加载纹理

python - 如何在python中模拟随机游走的首次通过时间概率?

python - 如何用Python实现PWM(脉宽调制)?

c++ - 无法构建 opengl es 2.0 c++ native android 项目。 ( fatal error : android/sensor. h:没有这样的文件或目录)

java - 使用 Windows 时 glDrawElements 上的 EXCEPTION_ACCESS_VIOLATION

c# - 哪个图形库适合技术应用(dx/ogl/xna)

python - 如果不返回错误,则无法使用 ProcessPoolExecutor 进行并行处理

c++ - sscanf 未在此范围内声明 - Eclipse、C++