我在Xcode/OpenGL中編程,並在我的視圖中顯示了一些3d對象。 有沒有一種方法可以在OpenGL中檢索我點擊的3D位置/頂點/臉部?我在哪裏點擊了OpenGL?
回答
通常的做法是調用gluUnProject
兩次,在這兩種情況下都使用x和y座標,在一種情況下使用znear,在另一種情況下使用zfar。
這給了你一個光線通過兩點。您的鼠標點擊在該射線上。
現在碰撞物體(如果需要,則首先包圍體積,然後每個三角形,如果可能,則採用參數化方式)。最接近的命中是你想要的。
不同的可能性是回讀z-buffer值(glReadPixels
)。這應該用一個像素緩衝區對象來完成,並且分散在多個幀上(否則它將成爲流水線上非常討厭的失速)。這會給你一個3D座標,你可以找到最接近的物體。
或者,您可以使用遮擋查詢(重新繪製禁用顏色寫入的1x1視口)以獲得相同的效果。
最後,當然有selection mode,但這是不建議使用的功能,所以您可能不想使用它。
謝謝,讓我嘗試不同的可能性。你會推薦哪一個? –
第一個是最喜歡的一個,因爲它不會拖延管道並且數學相對簡單。如果這不是選項,我會回讀z緩衝區。 – Damon
謝謝。我試圖實現它,幾乎成功。問題是,當我的模型被旋轉和翻譯時,我現在不會有什麼新的座標能夠測試碰撞。任何提示?謝謝 ! –
另一種方式來做到這一點,如果你是好使用的東西,在新的OpenGL版本不贊成使用採摘緩衝器/選擇模式:http://www.lighthouse3d.com/opengl/picking/
- 1. 我們可以確定在哪裏點擊了活動磁貼?
- 2. set.iterator().......我在哪裏錯了?
- 3. 我哪裏錯了?
- 4. 我哪裏錯了?
- 5. 我哪裏錯了?
- 6. 究竟我點擊了哪個對象?
- 7. 我點擊了哪個TD? jQuery的
- 8. opengl + glut glutPostRedisplay在哪裏?
- 9. 點擊了哪個按鈕?
- 10. 顯示在哪裏點擊的位置
- 11. Distutils - 我哪裏錯了?
- 12. 在Java中點擊了哪個按鈕?
- 13. 遞歸函數:我在哪裏錯了?
- 14. BCP問題 - 我在哪裏錯了?
- 15. 我的推理在哪裏錯了?
- 16. 我的PHP OOP在哪裏錯了?
- 17. RecyclerView - 我應該在哪裏處理它的點擊事件?
- 18. 哪裏錯了?
- 19. 哪裏運行Opengl命令?
- 20. 哪裏指向OpenGL z軸?
- 21. 如何知道我在燒瓶中點擊了哪個按鈕?
- 22. 滾動哪裏發生點擊 - Jquery的
- 23. 我在哪裏添加點值與pyshp
- 24. C++:我的新節點在哪裏?
- 25. 在哪裏瞭解「位」?
- 26. debrelease在哪裏放了包?
- 27. Event.Keys在哪裏去了?
- 28. GUI在哪裏去了?
- 29. OpenGL上下文存儲在哪裏?
- 30. OpenGL 3中的所有glTexParameters在哪裏?
參見[這個答案](http://stackoverflow.com/問題/ 2093096 /實施射線採摘/ 2093149#2093149)。 – Damon