OpenGL的:投影鼠标点击到几何(OpenGL: projecting mouse click o

2019-07-30 06:40发布

我有这种说法集:

glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective

和我从鼠标点击屏幕上的位置(SX,SY)。

定的Z值,我怎么能计算出三维空间x和y SX和SY?

Answer 1:

您应该使用gluUnProject

首先,计算“逆投影”到近平面:

GLdouble modelMatrix[16];
GLdouble projMatrix[16];
GLint viewport[4];

glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);

GLdouble x, y, z;
gluUnProject(sx, viewport[1] + viewport[3] - sy, 0, modelMatrix, projMatrix, viewport, &x, &y, &z);

然后到远平面:

// replace the above gluUnProject call with
gluUnProject(sx, viewport[1] + viewport[3] - sy, 1, modelMatrix, projMatrix, viewport, &x, &y, &z);

现在,你已经得到了世界坐标系描绘出你可能会被点击的所有可能的点。 所以,现在你只需要插:假设你给出的z坐标:

GLfloat nearv[3], farv[3];  // already computed as above

if(nearv[2] == farv[2])     // this means we have no solutions
   return;

GLfloat t = (nearv[2] - z) / (nearv[2] - farv[2]);

// so here are the desired (x, y) coordinates
GLfloat x = nearv[0] + (farv[0] - nearv[0]) * t,
        y = nearv[1] + (farv[1] - nearv[1]) * t;


Answer 2:

这是最好的最权威的来源,回答了OpenGL的网站 。



Answer 3:

这实际上是依赖于投影矩阵,而不是模型视图矩阵。 http://www.toymaker.info/Games/html/picking.html应该帮助你-这是D3D为中心的,但理论是一样的。

如果你正在寻找做基于鼠标的采摘,不过,我建议使用选择渲染模式。

编辑:你要知道,模型视图矩阵并开始发挥作用,但因为你是认同这是一个不成问题的问题。



Answer 4:

libqglviewer有一个很好的选择框架,如果这就是你要找的内容



文章来源: OpenGL: projecting mouse click onto geometry