我试图运行100000和更多的粒子。 我一直在观看许多教程和其他示例,它们展示了着色器和OpenCL的强大功能。
在我观察的一个例子中,粒子的位置是根据鼠标指针的位置计算的(用一只手握住的物理设备和光标在屏幕上)。 每个粒子的位置存储为RGB。 R是x,G y和B,z。并传递给像素着色器。然后将每个颜色像素绘制为粒子的位置。
但是我对这种方法感到很荒谬。
- 是不是要避免使用这种方法或编码风格?
- 我不知道如何使用OpenCL并使用GPU多线程的强大功能来直接声明并传递我想要的代码吗?
我试图运行100000和更多的粒子。 我一直在观看许多教程和其他示例,它们展示了着色器和OpenCL的强大功能。
在我观察的一个例子中,粒子的位置是根据鼠标指针的位置计算的(用一只手握住的物理设备和光标在屏幕上)。 每个粒子的位置存储为RGB。 R是x,G y和B,z。并传递给像素着色器。然后将每个颜色像素绘制为粒子的位置。
但是我对这种方法感到很荒谬。
是不是要避免使用这种方法或编码风格?
为什么?
着色器的整个要点是让您能够做您想做的事情,更有效地表达您想要做的事情,并让您自己更好地控制硬件。
你永远不应该, 曾经 害怕为某种不同的功能重新定位。纹理不存储颜色;他们存储 数据, 哪一个 能够 是颜色,但它也可以是其他东西。你越早停止将纹理视为图片,你作为图形程序员就会越好。
存在要使用的GPU和API。用它作为 您 觉得合适;不允许您认为应该如何使用API来限制您。
我不知道如何使用OpenCL并使用GPU多线程的强大功能来直接声明并传递我想要的代码吗?
昨天,我会说“是”。但是,今天发布了这个: OpenGL计算着色器。
OpenGL ARB和Khronos创建此着色器类型等事实默认了OpenCL / OpenGL互操作不是为渲染目的生成数据的最有效方式。毕竟,如果是的话,OpenGL就不需要具有通用的计算功能。 GL 4.x有3个版本没有提供此功能。它现在在这里的事实基本上是ARB说的,“是的,好吧,我们需要这个。”
如果ARB由许多制造硬件的人配备,认为CL / GL互操作不是最快的方法,那么很明显你应该使用计算着色器。
当然,如果你想做点什么的话 马上,这无济于事;只有NVIDIA才有计算着色器支持。甚至那只是在测试版驱动程序中。在AMD获得支持之前需要几个月的时间才能获得支持,在这种支持变得稳定且足够稳定之前,需要更多的支持。
即便如此,您也不需要计算着色器来生成数据。人们已经习惯了 转换反馈和几何着色器以对实例渲染进行LOD和视锥体剔除。 不要害怕在“OpenGL绘制东西”框之外思考。
要在OpenCL中模拟粒子,你应该试试“Yet Another Shader Editor”/ http://yase.chnk.us/ - 它消除了所有棘手的部分,让您深入了解粒子控制算法的编码。在你的浏览器中。无需下载,无需创建帐户,只需更改您找到的任何示例。这是一个爆炸。
https://lotsacode.wordpress.com/2013/04/16/fun-with-particles-yet-another-shader-editor/
我不以任何方式与yase有关系。