我尝试使用带有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)中鼠标的位置;但这并没有真正起作用。
答案 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);
我不明白这意味着什么,如果有人能向我解释它会很好。