2012-08-07 125 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

相關問題