2012-08-07 124 views
11

我想运行100000个以上的粒子。 我一直在看许多教程和其他例子,展示着色器和OpenCL的强大功能。(渲染粒子)我应该学习着色器还是OpenCL?

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

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

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

+1向我解释什么是电脑鼠标。 – 2012-08-07 08:19:02

+0

@ChristianRau哦,上帝,起初我以为你在开玩笑,但后来我读了它。史诗 – thecoshman 2012-12-12 09:16:07

回答

13

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

为什么?

着色器的全部重点是让您能够做到自己想要的,更有效地表达自己想要做的事情,并让自己更好地控制硬件。

你永远不应该,有史以来害怕重新用于不同的功能的东西。纹理不存储颜色;他们存储数据,其中可以是颜色,但它也可以是其他的东西。越早停止将纹理作为图片来思考,你越能成为图形编程人员。

存在要使用的GPU和API。使用它作为看合身;不要让你认为API应该被用来限制你。

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

昨天,我会说“是”。但是,今天发布了:OpenGL compute shaders

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

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

当然,如果你想要做些什么现在,那将无济于事;只有NVIDIA有计算着色器支持。即使这只是在测试版驱动程序。在AMD获得支持之前需要好几个月的时间,而且在支持变得稳定和稳定之前还需要更多的时间。

即便如此,您不需要计算着色器来生成数据。人们已经使用transform feedback and geometry shaders to do LOD and frustum culling for instanced rendering.不要害怕在“OpenGL吸取东西”框之外思考。

+1

非常感谢你,我没想到会有这么详细的解释。 <3 <3 <3我将尝试着重学习更多关于OpenGL和着色器的知识。我太想跳到箱子外面去想。大多数时候,我尝试了一些我认为是一种聪明的方法,而不是相反的直觉,换句话说,就是不好的编码例子。所以我认为从那以后我尝试使用代码和其他实用程序,我可以按照他们的意图进行合并。我将尝试为我的粒子项目构建着色器,但我仍然害怕出现丑陋,违反直觉的代码的可能性。这是一个眼光开放的回答,你说你在说:“不要害怕在”OpenGL吸取东西“的框外思考。” – BlueBug 2012-08-07 04:15:34

+0

它会让我自己思考或做些事情。我的意思是我倾向于将自己与其他人进行比较,因为我知道外面的人更好,并且知道很多细节。再加上有很多关于图形编程的优秀教程和视频,所以我也不太了解。在编程方面,我通常感觉非常小。我所做的大部分工作都是遵循教程或模仿其他人已经构建的东西(照明和其他东西)。 – BlueBug 2012-08-07 04:21:39

+2

这就是我们大家开始的@ user1217203。走出去创造一些东西! – 2012-08-08 02:17:06

相关问题