使用鼠标GlunUnproject移动对象

时间:2015-07-18 07:21:37

标签: opengl picking

我尝试使用带有openGL 2.1的Gluunproject方法用鼠标移动对象,但我真的在这里苦苦挣扎;这是我写的代码:

int viewport[4];
double  modelview[16],
       projection[16],
       X1, Y1, Z1;
double realY;
    GLfloat depth[2];

    for(_compt=_OjebctScene.begin();_compt!=_OjebctScene.end();_compt++)
    {

    if ((*_compt)->IsSelected())
    {
        GLdouble mouseX=event.x;
        GLdouble mouseY=event.y;

      glGetIntegerv(GL_VIEWPORT, viewport);
      glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
      glGetDoublev(GL_PROJECTION_MATRIX, projection);
      realY = viewport[3] - (GLint) mouseY - 1;
      glReadPixels(mouseX, realY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, depth);
      gluUnProject(mouseX, realY, 0, modelview, projection, viewport, &X1, &Y1, &Z1);
      (*_compt)->setX(X1);
      (*_compt)->setY(Y1);
      (*_compt)->setZ(Z1);
    }
}

我使用循环检查场景中的所有对象(我将它们推入矢量),然后当我找到所选对象时,我尝试使用鼠标移动它。

然后我将对象的坐标设置为3D空间(X1,Y1,Z1)中鼠标的位置;但这并没有真正起作用。

1 个答案:

答案 0 :(得分:0)

我想我只是通过将depth [0]传递给gluunproject方法来修复它。 这就是我所做的,改变这个:

  gluUnProject(mouseX, realY, 0, modelview, projection, viewport, &X1, &Y1, &Z1);

由此:

  gluUnProject(mouseX, realY,depth[0], modelview, projection, viewport, &X1, &Y1, &Z1);

我不明白这意味着什么,如果有人能向我解释它会很好。