2015-01-26 42 views
0

我正在研究一個項目,我需要選擇網格的兩個頂點並計算它們之間的最短路徑。我使用GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER來綁定OpenGL緩衝區並通過glDrawElements繪製它們。如何在現代OpenGl(3.3以上)中選擇網格的頂點或三角形?

找到最短路徑在這裏不是問題。問題在於頂點選擇。我需要通過點擊鼠標來選擇頂點並存儲它們的ID以用於進一步處理。我有一些函數返回鼠標位置,但我找不到可以獲取頂點ID或三角形ID的方法。

我還發現了有關rayPicking方法,但那個用於選擇網格本身而不是它的一個元素。

我明白任何幫助或想法

更新:,我要對付的網格,有大量的頂點和三角形的,所以如應用獨特的顏色給每個頂點的方法是不是正確的解決方案。同樣爲每個頂點或三角形添加一個球體,並計算出射線與球體的交點也不合適。

+0

您可以使用以每個網格點爲中心的球體進行光線拾取。 – 2015-01-27 16:52:34

回答

0

我從來沒有實現過這樣的東西,但我會推薦像下面這樣的另一個渲染通道。

  1. 爲每個頂點定義指定頂點ID的唯一顏色。
  2. 因爲很難精確地選擇一個像素,所以嘗試在它周圍繪製一個小四邊形。 glPointSize(...)可能是有用的。
  3. 從您渲染小四邊形的紋理/幀緩衝區中讀取像素的顏色。
  4. 計算顏色中的頂點ID。

我聽說過幾個類似的三角形實現。也許你可以從他們那裏獲得更多靈感。

+0

謝謝DanceIgel。但不幸的是,我必須處理的網格有很多三角形和頂點(500,000 - 1,000,000)。仍然可以使用顏色,但它會導致彩色網格。 – user2613947 2015-01-27 23:06:35

+0

我發現有關gl_PrimitiveID,GLSL函數之一,但我無法從着色器中獲得outpu ID! – user2613947 2015-01-27 23:18:41

+0

@ user2613947也可以將ID直接寫入浮動紋理。但我不確定'gl_PrimitiveID'是否與您的輸入數據集的確切索引匹配。但當然你可以試試看。 – DanceIgel 2015-01-28 08:16:25

相關問題