2017-09-13 101 views
-1

首先,我是通用的WebGL,Op​​enGL編程的新手。我認爲這些工具可以讓我解決一個問題,但我不知道從哪裏開始。大規模光線投射和計數命中

我的問題: 給定一個起點,一個目標(三角形或網狀)和多方向矢量(千)清單,有沒有用我的GPU來算擊中目標的光線數量的方式?理想情況下,我想用我的GPU的能力來解決這個問題,因爲它似乎比我的CPU更適合它。

我相當肯定我可以用我的cpu編寫一些代碼來做到這一點,但是它需要很長時間才能在for循環中通過我的向量。

感謝

+0

你的光線的方向矢量是隨機分佈還是形成一個統一的網格?與光線數量相比,您有多少個三角形? – Quinchilion

+0

方向儘可能隨機,但只限於一個半球。一般來說,我將處理一個簡單的目標與少於十幾個三角形。在某些情況下,需要查看3到4個單獨的目標。 – user2693883

回答

0

你可以試試這個,這不是begginers的事情,但:

  1. Store中的三角形/網格在VBO,這是比較容易的部分。
  2. 將您的方向矢量存儲在紋理中也很容易。使用實例化渲染。這樣每個着色器實例都有一個不同的標識符。
  3. 使用該標識符從紋理進行採樣。每個着色器實例都有不同的方向向量。
  4. 現在,棘手的部分:着色器在某個緩衝區中增加一個值(已計算的點擊次數)。使用圖片。請閱讀 wiki Image Load Store約 他們,特別是「原子操作」部分。
  5. 最後,使用其他着色器讀取該圖像的值。
+0

現在絕對超出我的能力,但至少這是一個起點。我現在可以研究這些概念並希望能夠解決這個問題。以前甚至都不知道我的搜索中包含哪些條款。 – user2693883

0

我看到實現你正在嘗試做的一種方式,就是用另一種方式來思考你的問題,在屏幕上的一種「反向」光線投射。

你說你只有一個原點,一個目標,和很多的方向。因此,它大致類似於光線跟蹤渲染,因此您可以從WebGL製作的角度來思考問題:使用投影矩陣在屏幕上繪製3D對象。

  • 創建一個投影矩陣對應於您的原點爲的觀點,在看目標,與適當的FOV

  • 渲染在平坦顏色的對象(黑色背景上的例如白色)在一個紋理,使用這個投影矩陣。

  • 使用相同的投影矩陣將射線「投影」到2D紋理座標中。

  • 檢查光線方向的結果2D座標中的紋理像素:如果像素是白色,則此光線會撞擊物體。

你甚至可以使用另一種着色器來實現的最後兩個部分,通過傳送光線方向的頂點緩存,與在片段着色器之前創建的質感。問題將是從着色器獲得遞增的值。