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