Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL喷泉仿真_C++_Opengl_Simulation - Fatal编程技术网

C++ OpenGL喷泉仿真

C++ OpenGL喷泉仿真,c++,opengl,simulation,C++,Opengl,Simulation,我的任务是创建一个带有水粒子和水面碰撞的喷泉模拟。到目前为止,我已经使用一个着色器创建了水面,另一个着色器创建了喷泉粒子(喷泉粒子的着色器也使用了变换反馈机制) 我的问题是:如何制作/检测喷泉粒子和水面碰撞我想知道,如何从plane的着色器/GL缓冲区和particle的着色器/GL缓冲区获取/连接信息以进行碰撞-我知道水波方程和碰撞检测方法-我只是不知道什么允许OpenGL的API。您需要做的是调查OpenCL与OpenGL互操作的可能性。查找显示使用OpenCL(使用OpenGL渲染)进行粒

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


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

您需要做的是调查OpenCL与OpenGL互操作的可能性。查找显示使用OpenCL(使用OpenGL渲染)进行粒子碰撞模拟的nVidia示例。OpenGL作为一个计算API是非常有限的,要想做你想做的事情而不跳转是非常困难的(我想这是可能的——只是不太容易)

您需要做的是调查OpenCL与OpenGL互操作的可能性。查找显示使用OpenCL(使用OpenGL渲染)进行粒子碰撞模拟的nVidia示例。OpenGL作为一个计算API是非常有限的,要想做你想做的事情而不跳转是非常困难的(我想这是可能的——只是不太容易)

您描述的问题与OpenGL的工作描述不匹配。OpenGL是一个绘图API,其目的是绘制漂亮的图片。碰撞检测之类的事情完全超出了OpenGL的范围

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


这种方法是可行的,但坦率地说,我认为它完全是设计过度了。仅测试地面以上的颗粒高度是否大于平均水位;对于小波纹波,这已经足够准确了。

您描述的问题与OpenGL的工作描述不匹配。OpenGL是一个绘图API,其目的是绘制漂亮的图片。碰撞检测之类的事情完全超出了OpenGL的范围

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


这种方法是可行的,但坦率地说,我认为它完全是设计过度了。仅测试地面以上的颗粒高度是否大于平均水位;对于小波纹波来说,这已经足够准确了。

这个问题根本不属于这里。这个网站是关于帮助有问题的人,而不是提供一般问题的解决方案。你能用数学方法描述水面吗?我假设一个粒子只是一个小球?也许我的问题不正确。我想知道如何从平面的着色器中获取平面顶点,从GL缓冲区中获取粒子顶点以进行碰撞。这个问题根本不属于这里。这个网站是关于帮助有问题的人,而不是提供一般问题的解决方案。你能用数学方法描述水面吗?我假设一个粒子只是一个小球?也许我的问题不正确。我想知道如何从平面的着色器获取平面顶点,以及如何从GL缓冲区获取粒子顶点以进行碰撞。是的,第二种方法更容易,我知道我可以在粒子的着色器中简单地实现这一点,但这涉及到我的下一个问题:我如何知道(或程序如何知道)坐标(X和Z)是什么这个粒子在一定高度下(水有不同的着色器)-这样我就可以在粒子与水面碰撞的地方在水的平面上创建波纹波?我应该在CPU上预先计算吗?@Shot:你应该在粒子动画的代码中处理这个问题。也就像粒子一样,你必须发送一些几何图形到OpenGL来渲染水面;很可能是某个四边形,在其上应用ripple着色器。您可以针对该四边形的几何体进行测试,或者仅针对其跨越的平面进行测试。你知道,取一个平面方程,把粒子的位置放进去,测试得到的数字是正的还是负的。是的,第二种方法更容易,我知道我可以在粒子的着色器中简单地完成,但它涉及到我的下一个问题:我如何知道(或者程序如何知道)坐标(X和Z)是什么这个粒子在一定高度下(水有不同的着色器)-这样我就可以在粒子与水面碰撞的地方在水的平面上创建波纹波?我应该在CPU上预先计算吗?@Shot:你应该在粒子动画的代码中处理这个问题。也就像粒子一样,你必须发送一些几何图形到OpenGL来渲染水面;很可能是某个四边形,在其上应用ripple着色器。您可以针对该四边形的几何体进行测试,或者仅针对其跨越的平面进行测试。你知道,取一个平面方程,把粒子的位置放进去,测试得到的数字是正的还是负的。