OpenGL gluUnProject对象拖动和摄像头问题

时间:2013-09-14 00:47:26

标签: c++ opengl

我正在尝试使用鼠标移动对象:

我检索实际的矩阵并使用gluUnProject从鼠标位置dx和dy获得实际的x,y,z。一切正常,直到我不移动相机。当相机处于45,225度时工作正常从X轴开始。

Working fine here 但当我靠近x(+ - )\ z(+ - )轴时,行为(对象应该移动的计划没有正确更新)

enter image description here 我在鼠标点击事件上做的事情:

gluUnProject(event->x(), -event->y(), 0, model_matrix, proj_matrix, view_matrix, &newx, &newy, &newz);
    //dx and dy = mouse coords
    if (dy<dx){
        if (event->x()>mNewMousePosition.x()){
            emit SignalPreviewMouseChanged((float)(mNewx/1500)*acc,0,(float)(-mNewz/1500)*acc);
        }
        else {
            emit SignalPreviewMouseChanged((float)(-mNewx/1500)*acc,0,(float)(mNewz/1500)*acc);
        }
    }
    else{
        if (event->y()<mNewMousePosition.y())
            emit SignalPreviewMouseChanged(0,(float)(mNewy/750)*acc,0);
        else {
            emit SignalPreviewMouseChanged(0,(float)(-mNewy/750)*acc,0);
        }
    }

这就是渲染方法:

void PaintGL()
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glViewport (0, 0, mScreenWidth, mScreenHeight);

if (mRotateAroundYAxis){
    gluLookAt(mObjCamera->Pos().x,  mObjCamera->Pos().y,  mObjCamera->Pos().z,
              0, mObjCamera->View().y, 0,
              mObjCamera->Up().x,   mObjCamera->Up().y,   mObjCamera->Up().z);        
}else{
    gluLookAt(mObjCamera->Pos().x,  mObjCamera->Pos().y,  mObjCamera->Pos().z,
              mObjCamera->View().x, mObjCamera->View().y, mObjCamera->View().z,
              mObjCamera->Up().x,   mObjCamera->Up().y,   mObjCamera->Up().z);            
}

glGetDoublev(GL_MODELVIEW_MATRIX, model_matrix);
glGetDoublev(GL_PROJECTION_MATRIX, proj_matrix);
glGetIntegerv(GL_VIEWPORT, view_matrix);

for (int k=0;k<mIndexSize/2;k++) {
    glCallList(mIndexSize-k);
}

DrawGrid();
DrawAxis();
}

0 个答案:

没有答案