我在做簡單的3D遊戲。在3D場景中檢測鼠標移動到物體上的最佳方式是什麼?如何檢測鼠標在OpenGL中的某個對象?
回答
其實,我會避免使用這些挑選方法,只是在數學上做。直接從鼠標光標位置創建一條直線到場景中,並與場景中每個對象的邊界球體相交。對於相交的每個邊界球,只需檢查哪個頂點與眼睛位置最接近即可。
直線可以分別使用該算法其中z設置爲0 1.
math::Vec3f windowToObjectf(const math::Vec3f& windowCoord) {
math::Matrix4f modelViewMatrix;
math::Matrix4f projectionMatrix;
std::array <GLint, 4> viewport;
glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix.data());
glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix.data());
glGetIntegerv(GL_VIEWPORT, &viewport.front());
math::Vec3f ret(0, 0, 0);
auto succes = gluUnProject(windowCoord.x , windowCoord.y, windowCoord.z, modelViewMatrix.data(), projectionMatrix.data(), &viewport.front(), &ret.x, &ret.y, &ret.z);
RASSERT(succes == GL_TRUE);
GL_RASSERT();
return ret;
}
它對某些東西有什麼好處像顏色編碼實體ID? – 2013-02-19 09:18:45
@BartekBanachewicz:你的意思是,除了顯然不需要重新渲染整個場景?而不是誘導GPU-> CPU回讀? – 2013-02-19 09:38:29
我們正在閱讀4個字節的頂端,它真的很重要嗎?我不得不測量。 – 2013-02-19 09:47:32
- 1. 如何使用鼠標在C++ opengl中滾動對象:
- 2. 如何在opengl Android中進行對象檢測?
- 3. 檢測鼠標是否位於iframe中的某個元素上
- 4. 如何檢測鼠標指針的座標在一個div
- 5. 如何檢測鼠標中鍵點擊?
- 6. 檢測鼠標點擊一個遊戲對象
- 7. 檢測OpenGL對象的觸摸?
- 8. 如何檢測Java中的Image對象的鼠標單擊事件?
- 9. 如何檢測鼠標是否直接位於WPF中的對象類型
- 10. 如何在鼠標左鍵按下時檢測鼠標移動?
- 11. 如何使用OpenGL通過鼠標旋轉3D對象?
- 12. Qt OpenGL-如何根據鼠標點擊獲取對象
- 13. 檢查鼠標是否在對象上
- 14. 如何在AngularJS中檢測鼠標事件的目標模型
- 15. matplotlib在鼠標事件時檢測對象
- 16. Android OpenGL紋理/對象檢測
- 17. OpenGL ES - 如何將某個對象保持在固定大小?
- 18. 在nsbezierpath上檢測鼠標
- 19. 檢測鼠標不在QGraphicsScene
- 20. Zedgraph在線檢測鼠標
- 21. 讓jquery腳本檢測到swf對象上的鼠標移動?
- 22. 如何在OpenCV中的sobel檢測之後檢測對象
- 23. 如何在循環中檢測鼠標在datagrid上的位置?
- 24. 如何在網站中檢測鼠標的存在?
- 25. 如何檢測鼠標點擊python 3.6.1
- 26. 如何檢測鼠標點擊QLineEdit
- 27. 如何檢測人造鼠標移動?
- 28. gmail如何檢測鼠標移動?
- 29. 如何檢測鼠標點擊
- 30. 如何檢測鼠標滾輪傾斜?
閱讀有關的openGL選擇緩衝液來創建。 – 2013-02-19 08:47:08
[OpenGL GL \ _SELECT或手動碰撞檢測的可能的重複?](http://stackoverflow.com/questions/4040616/opengl-gl-select-or-manual-collision-detection) – 2013-02-19 09:18:00