OpenGL中, 怎么在三维模型下实现定位功能
OpenGL中, 如何在三维模型上实现定位功能?
问题是这样, 窗口中使用OpenGL显示了一个三维模型. 那现在我想通过鼠标在模型上的点击, 获取三维模型被点击部位的参数, 例如模型顶点即对象坐标系中的顶点. 请问该如何实现呢?
谢谢!
------解决方案--------------------
方法1: pick机制,比如立方体上想让8个顶点可以选取的话,则在8个顶点处放置8个小尺寸形体(可不显示,鼠标移过的时候高亮显示,命名,然后就可以pick了 这部分入门较难
参阅红宝书
理解后比较简单,可在鼠标tool配合下选取任意形状(面,球glutSolidSphere)
2: 楼上提到的gluUnProject一般不能把窗口平面坐标变为你想要的3D坐标 正投影下获取的可能比较准确,参考以下代码:
问题是这样, 窗口中使用OpenGL显示了一个三维模型. 那现在我想通过鼠标在模型上的点击, 获取三维模型被点击部位的参数, 例如模型顶点即对象坐标系中的顶点. 请问该如何实现呢?
谢谢!
OpenGL
定位
三维模型
------解决方案--------------------
方法1: pick机制,比如立方体上想让8个顶点可以选取的话,则在8个顶点处放置8个小尺寸形体(可不显示,鼠标移过的时候高亮显示,命名,然后就可以pick了 这部分入门较难
参阅红宝书
理解后比较简单,可在鼠标tool配合下选取任意形状(面,球glutSolidSphere)
2: 楼上提到的gluUnProject一般不能把窗口平面坐标变为你想要的3D坐标 正投影下获取的可能比较准确,参考以下代码:
GCPosition4D OpenGLControl::ScreenToPoint(int x,int y)
{
GLint viewport[4];
GLdouble mvmatrix[16],projmatrix[16];
::wglMakeCurrent(m_pDC->GetSafeHdc(),m_hGLRC);
glPushMatrix();
glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix);
glGetDoublev(GL_PROJECTION_MATRIX,projmatrix);
GLdouble wx, wy, wz;
gluUnProject(x, viewport[3]-y - 1, 0.5, mvmatrix, projmatrix, viewport, &wx, &wy, &wz);
glPopMatrix();
::wglMakeCurrent(NULL,NULL);
return Position4D(wx,wy,wz);
}