簡體   English   中英

如何在現代 OpenGl(以上 3.3)中選擇網格的頂點或三角形?

[英]How to select a vertex or triangle of a mesh in modern OpenGl (3.3 above)?

我正在做一個項目,我需要選擇網格的兩個頂點並計算它們之間的最短路徑。 我正在使用 GL_ARRAY_BUFFER 和 GL_ELEMENT_ARRAY_BUFFER 來綁定 OpenGL 緩沖區並通過 glDrawElements 繪制它們。

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

我還發現了 rayPicking 方法,但該方法用於選擇網格本身而不是其中的一個元素。

我感謝任何幫助或想法

更新:我必須處理的網格具有大量的頂點和三角形,因此對每個頂點應用唯一顏色等方法不是一個合適的解決方案。 此外,向每個頂點或三角形添加一個球體並計算射線與球體的交點聽起來也不合適。

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

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

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

從概念上講,您可以創建另一個單獨的幀緩沖區。 然后將頂點 ID 編碼為 RGBA 顏色值。 在當前可見幀緩沖區上繪制網格時,需要同時將頂點 ID 的編碼顏色繪制到其他幀緩沖區中。 選取一個點時,您可以從其他幀緩沖區中恢復編碼的頂點 ID,並對其進行解碼以獲取原始頂點 ID。 簡而言之,您需要制作另一個不可見的單獨幀緩沖區用於拾取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM