2015-10-30 40 views
1

我目前正在開發基於Java的Android項目。我正在使用OpenGL-ES 3.0。如何找到位於3D邊界內的點

在我的項目中,我有一個擁有100000多個頂點和400000多個三角形的大而複雜的3D物體(人體頭部)。對象的頂點存儲在一個數組中。物體可以相對於其質心旋轉。

我試圖實現一個功能,用戶在頭上選擇一組點,並繪製一條線連接每個點(類似「連接點」)。換句話說,用戶選擇頭部上的點(p1,p2,p3 ... pn),並且選擇的點將改變顏色。然後,在選擇最後一個點(pn)後,運行一個算法來計算每個點之間的所有頂點(例如,p1和p2)。那些頂點會改變顏色,所以用戶看到他們選擇的每個點之間的一條線(或接近一條線)。

我已經實現了一種允許用戶選擇點並通過改變顏色來查看這些點的方法。我遇到的困難是實現點之間的界限。

我現在必須要繪製這些線的唯一想法是利用我已編程的代碼。我有允許用戶移動橢球的代碼(他們可以選擇尺寸並旋轉橢球)。他們將橢圓體移動到頭部的某個位置,並運行一種算法,該算法計算位於橢球體積內的頭部的所有點,並更改這些點的顏色。

我的想法是將p1和p2的中點設置爲橢圓體的中心,並旋轉/拉伸橢圓體的尺寸,使一個軸從p1運行到p2,另一個軸是一個很大的值。基本上,它看起來像是採取扁平的球狀(類似於紅血球),並將球的一端放在p1上,而另一端放在p2上。然後我可以運行已經編碼的算法來查找該橢球內的所有點。然後我可以改變這些點的顏色,用戶可以在他們選擇的每個點之間看到一條線。

有沒有人有任何批評這種技術?有沒有其他方法可以達到我期望的結果?

+0

所以你只是想要一個橢球/點測試(點是網格上的頂點)?聽起來相對簡單;應該有網上的算法來做到這一點。 –

回答

0

要檢查點接觸或橢圓內:

  • 通過-x,-y,-z(x,y和z是該橢圓的中心 )翻譯世界使得(0 ,0,0)成爲橢球的新中心。
  • 旋轉世界,使橢球變爲0度。
  • 將世界縮放1/a,1/b和1/c(a,b和c爲橢圓軸的長度)。
  • 如果sqroot(a^2 + b^2 + c^2)< = 1,則該點位於球體內部 。
相關問題