(渲染粒子)我应该学习着色器还是OpenCL?

Blu*_*Bug 11 c++ opengl shader opencl

我试图运行100000和更多的粒子.我一直在观看很多教程和其他展示着色器和OpenCL强大功能的例子.

在我观察的一个例子中,粒子的位置是根据鼠标指针的位置计算的(用一只手握住的物理设备和光标在屏幕上).每个粒子的位置存储为RGB.R是x,G y和B,z.并传递给像素着色器.然后将每个颜色像素绘制为粒子的位置.

但是我对这种方法感到很荒谬.

  • 是不是要避免使用这种方法或编码风格?
  • 我不知道如何使用OpenCL并使用GPU多线程的强大功能来直接说明并传递我想要的代码吗?

Nic*_*las 13

是不是要避免使用这种方法或编码风格?

为什么?

着色器的整个要点是让您能够做您想做的事情,更有效地表达您想要做的事情,并让您自己更好地控制硬件.

你永远应该害怕为某种不同的功能重新定位某些东西.纹理不存储颜色; 他们存储数据,可以是颜色,但也可以是其他东西.你越早停止将纹理视为图片,你作为图形程序员就会越好.

存在要使用的GPU和API.使用它作为认为合适的; 不允许您认为应该如何使用API​​来限制您.

我不知道如何使用OpenCL并使用GPU多线程的强大功能来直接说明并传递我想要的代码吗?

昨天,我会说"是".然而,今天发布了这个:OpenGL计算着色器.

OpenGL ARB和Khronos创建此着色器类型等事实默认了OpenCL/OpenGL互操作不是为渲染目的生成数据的最有效方式.毕竟,如果是的话,OpenGL就不需要具有通用的计算功能.GL 4.x有3个版本没有提供此功能.它现在在这里的事实基本上是ARB说的,"是的,好的,我们需要这个."

如果ARB由许多制造硬件的人配备,认为CL/GL互操作不是最快的方法,那么很明显你应该使用计算着色器.

当然,如果你试图做一些事情,现在,那也不会帮助; 只有NVIDIA才有计算着色器支持.甚至那只是在测试版驱动程序中.在AMD获得支持之前需要几个月的时间,而且在支持变得稳定且足够稳定之前还需要更多支持.

即便如此,您也不需要计算着色器来生成数据.人们使用变换反馈和几何着色器来进行LOD和视锥体剔除以进行实例渲染.不要害怕在"OpenGL绘制东西"框之外思考.

  • 这就是我们所有人的开始,@ user1217203.去那里创造一些东西! (2认同)