2009-10-15 19 views
0

我目前正在編寫一個實際上充當3D網格「切割」工具的應用程序。那麼,我現在遇到了一些問題,我對如何解決這些問題一無所知,因爲它是我的第一個應用程序。頂點選擇和旋轉後的模型狀態

我已經從一個對象文件中加載了一個模型到畫布上,然後在同一個畫布上,我使用鼠標拖動事件來繪製線來定義切割點。

讓我們說我想把球切成兩半,我在中間畫一條線。如何檢測線下的球的頂點。其次,如果我旋轉/翻譯球,所有的頂點信息都會改變嗎?

+0

或許「球」比「球」更好。 – 2009-10-15 07:23:15

+0

嗨,你解決了嗎? – elect 2015-08-07 13:30:19

回答

1

想想你會在現實世界中做什麼:你不能用一條線切割一個球,你必須使用一把刀(一條線沒有體積)。要切球,你必須將球移動穿過球。

所以你正在尋找的是一架飛機,而不是一條線。要獲得這樣的飛機,你必須使用一些3D數學。你有什麼是帆布的方向和飛機的「側視圖」(看起來像一條線)。

所以你要找的飛機是垂直於畫布。獲得這樣一個平面的一個簡單方法是取畫布方向並創建一個具有相同方向的平面,然後將該平面圍繞該線旋轉90°。

之後,您可以訪問您的模型的所有邊緣,並確定它們在飛機的哪一側。爲此,確定平面的哪一側是邊緣的端點。使用交叉產品。如果他們在同一側(兩個交叉產品的結果將具有相同的符號),則可以忽略邊緣。否則,您需要確定邊緣和平面的交點。創建新邊並相應地連接它們。

請參閱this page關於數學的一些背景知識。但是你應該在你的opengl庫中找到所有這些輔助方法。

如果我旋轉/平移球,將所有的頂點信息變化

當然。

1

這不會那麼容易。

我假設你正在繪製的線條引起一個平面,然後切割球體。

要做到這一點,您必須計算球體和平面的相交面積。

這不是一項簡單的任務,我建議爲此使用現有的框架,或者如果您確實想自己完成此任務,請閱讀有關基本交叉問題以瞭解此類問題的感受。 This paper提供了一個很好的介紹各種相交測試。

在您的情況下,在一般的邊界代表卷中,在涉及更高級的操作時很難處理。與將一個小洞打入其中相比,將球體切成兩半很容易。有時最好使用體積表示,如四面體網格或CSG

關於你的第二個問題,你不應該旋轉或翻譯球體,旋轉和翻譯相機