2013-05-13 29 views
0

我必須計算平面上鏡子的可見性場(即:地面)。每頂點反射和相交計算,OpenCL vs GLSL

鏡面由幾個三角形組成(最多可達數千個)。

enter image description here

每個頂點限定了鏡點,每個反射鏡點可以對應於多達6個三角形頂點和具有正常。

爲了做到這一點,我應該計算特定點(代表駕駛員頭部(所有藍線來自哪裏)和每個鏡像點位於鏡面上的線(在圖像上右邊)。然後,對於每一個點,我都應該根據第i條藍線和第i條法線的方向以及第i條黃線和地板之間的交點來計算它們的反射(黃線)。 顯然,藍色和黃色的線需要用過程中的車輛幾何任何交集進行測試..

enter image description here

眼下整個過程的CPU,以便使運行,有一些近似它更快,原來的想法是然後移動OpenCL的計算部分..我來自一個CUDA環境(你知道OpenCL是非常相似),我瞭解OpenGL,現在我開始發現GLSL。

鑑於我讀過GLSL有與Cuda/OpenCL相比有一些侷限性,但速度更快,兼容性更廣,是否可以實現我在GLSL中需要的功能?如果是的話,它是否有任何問題/限制如此強大,以至於它可能不值得?

+0

你能否詳細說說你想計算的東西? – Trax 2013-05-13 09:45:04

+0

圖片太商城:) – Trax 2013-05-13 10:09:06

+0

@Trax,我試圖闡述它,讓我知道如果它是足夠明確:) 關於圖像,不幸的是我沒有更高的分辨率的副本,我讓他們更大的雙.. – elect 2013-05-13 10:14:13

回答

2

對於與GPGPU(圖形處理單元上的通用計算)配合使用的算法,您需要能夠表達需要使用矩陣或向量計算的內容,以便獲得SIMD。這裏有來自GPU Gems的好文章。

在快速查看您對計算的描述之後,在我看來,您應該可以執行此操作。您將輸入數據(如您的鏡像點)與紋理一起傳輸,並將紋理轉換爲輸出數據。然而單點或矢量可以作爲GLSL均勻矢量發送。

但是由於GLSL不適用於GPGPU,因此需要付出相當大的努力和時間。正確獲取所有紋理座標可能非常棘手。所以如果你急於實現這一點,GLSL可能不是要走的路。

嘗試在GLSL中進行通用計算時可能遇到的一個限制是,在某些平臺上,您無權訪問浮點紋理,有時您只能存儲整數值。 (要將數據存入GLSL着色器,需將矢量或矩陣存儲爲紋理)。具體來說,我已經跑到這與iPhone 3GS,我不知道後續版本。