2011-07-25 48 views
2

我在Xcode/OpenGL中編程,並在我的視圖中顯示了一些3d對象。 有沒有一種方法可以在OpenGL中檢索我點擊的3D位置/頂點/臉部?我在哪裏點擊了OpenGL?

+0

參見[這個答案](http://stackoverflow.com/問題/ 2093096 /實施射線採摘/ 2093149#2093149)。 – Damon

回答

3

通常的做法是調用gluUnProject兩次,在這兩種情況下都使用x和y座標,在一種情況下使用znear,在另一種情況下使用zfar。

這給了你一個光線通過兩點。您的鼠標點擊在該射線上。

現在碰撞物體(如果需要,則首先包圍體積,然後每個三角形,如果可能,則採用參數化方式)。最接近的命中是你想要的。

不同的可能性是回讀z-buffer值(glReadPixels)。這應該用一個像素緩衝區對象來完成,並且分散在多個幀上(否則它將成爲流水線上非常討厭的失速)。這會給你一個3D座標,你可以找到最接近的物體。

或者,您可以使用遮擋查詢(重新繪製禁用顏色寫入的1x1視口)以獲得相同的效果。

最後,當然有selection mode,但這是不建議使用的功能,所以您可能不想使用它。

+0

謝謝,讓我嘗試不同的可能性。你會推薦哪一個? –

+0

第一個是最喜歡的一個,因爲它不會拖延管道並且數學相對簡單。如果這不是選項,我會回讀z緩衝區。 – Damon

+0

謝謝。我試圖實現它,幾乎成功。問題是,當我的模型被旋轉和翻譯時,我現在不會有什麼新的座標能夠測試碰撞。任何提示?謝謝 ! –