void Viewer::keyPressEvent(QKeyEvent *pEvent_) { using namespace btl::kinect; using namespace Eigen; // Defines the Alt+R shortcut. if (pEvent_->key() == Qt::Key_0) { _pData->_bCameraFollow = !_pData->_bCameraFollow; camera()->setPosition(qglviewer::Vec(0, 0, 0)); camera()->setUpVector(qglviewer::Vec(0, -1, 0)); camera()->setViewDirection(qglviewer::Vec(0, 0, 1)); updateGL(); // Refres #ifdef INACCURATE_METHOD_0 Affine3f prj_w_t_c; _pData->_pTracker->getCurrentProjectionMatrix(&prj_w_t_c); Vector3f pos = -prj_w_t_c.linear().transpose() * prj_w_t_c.translation(); Vector3f upv = prj_w_t_c.linear()*Vector3f(0, -1, 0); //up vector Vector3f vdr = prj_w_t_c.linear()*Vector3f(0, 0, 1); //viewing direction camera()->setPosition(qglviewer::Vec(pos(0), pos(1), pos(2))); camera()->setUpVector(qglviewer::Vec(upv(0), upv(1), upv(2))); camera()->setViewDirection(qglviewer::Vec(vdr(0), vdr(1), vdr(2))); updateGL(); // Refresh display #endif #ifdef INACCURATE_METHOD_1 glMatrixMode(GL_MODELVIEW); Affine3f init; init.setIdentity(); init(1, 1) = -1.f; init(2, 2) = -1.f;// rotate the default opengl camera orientation to make it facing positive z Affine3f prj_w_t_c; _pData->_pTracker->getCurrentProjectionMatrix(&prj_w_t_c); prj_w_t_c = init * prj_w_t_c; //the order matters glLoadMatrixf(prj_w_t_c.data());//times with manipulation matrix GLdouble mvm[16]; glGetDoublev(GL_MODELVIEW_MATRIX, mvm); camera()->setFromModelViewMatrix(mvm); updateGL(); // Refresh display #endif } else if (pEvent_->key() == Qt::Key_BracketLeft) { //_idx_view--; //Affine3f prj_w_t_c = _pData->getTrackerPtr()->getView(&_idx_view); //Affine3f init; init.setIdentity(); init(1, 1) = -1.f; init(2, 2) = -1.f;// rotate the default opengl camera orientation to make it facing positive z //prj_w_t_c = init * prj_w_t_c; //the order matters //Affine3d mTmp = prj_w_t_c.cast<double>(); //mTmp.linear().transposeInPlace(); //camera()->setFromModelViewMatrix(mTmp.data()); camera()->setPosition(qglviewer::Vec(0, 0, 0)); camera()->setUpVector(qglviewer::Vec(0, -1, 0)); camera()->setViewDirection(qglviewer::Vec(0, 0, 1)); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_BracketRight) { //_idx_view++; //Affine3f prj_c_f_w = _pData->getTrackerPtr()->getView(&_idx_view); //Affine3f init; init.setIdentity(); init(1, 1) = -1.f; init(2, 2) = -1.f;// rotate the default opengl camera orientation to make it facing positive z //prj_c_f_w = init * prj_c_f_w; //the order matters //Affine3d mTmp = prj_c_f_w.cast<double>(); //mTmp.linear().transposeInPlace(); //camera()->setFromModelViewMatrix(mTmp.data()); //camera()->setPosition(qglviewer::Vec(0, 0, 0)); //camera()->setUpVector(qglviewer::Vec(0, -1, 0)); //camera()->setViewDirection(qglviewer::Vec(0, 0, 1)); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_1) { _bShowText = !_bShowText; updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_2) { //Matrix4f mModelView; //Affine3f prj; //_pData->getTrackerPtr()->getCurrentFeatureProjectionMatrix(&prj); //mModelView = btl::utility::setModelViewGLfromPrj(prj); //Matrix4d mTmp = mModelView.cast<double>(); //mTmp.linear().transposeInPlace(); //camera()->setFromModelViewMatrix(mTmp.data()); //updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_4 && !(pEvent_->modifiers() & Qt::ShiftModifier)){ _pData->switchShowTexts(); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_6) { //_pData->switchShowMatchedFeaturesForRelocalisation(); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_7) { _pData->switchShowSurfaces(); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_8) { updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_9) { _pData->switchPyramid(); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_L && !(pEvent_->modifiers() & Qt::ShiftModifier)) { _pData->switchLighting(); updateGL(); // Refresh display } else if (pEvent_->key() == Qt::Key_F2) { _pData->switchImgPlane(); updateGL(); } else if (pEvent_->key() == Qt::Key_F3) { _pData->switchReferenceFrame(); updateGL(); } else if (pEvent_->key() == Qt::Key_F4){ _pData->switchCurrentFrame(); updateGL(); } else if (pEvent_->key() == Qt::Key_F5){ _pData->switchCameraPath(); updateGL(); } else if (pEvent_->key() == Qt::Key_F6){ _pData->switchShowCamera(); updateGL(); } else if (pEvent_->key() == Qt::Key_R && !(pEvent_->modifiers() & Qt::ShiftModifier)){ _pData->loadFromYml(); _pData->reset(); updateGL(); } else if (pEvent_->key() == Qt::Key_A && !(pEvent_->modifiers() & Qt::ShiftModifier)){ //lower a _pData->_bSave = !_pData->_bSave; updateGL(); } else if (pEvent_->key() == Qt::Key_S && !(pEvent_->modifiers() & Qt::ShiftModifier)){ _pData->switchCapturing(); updateGL(); } else if (pEvent_->key() == Qt::Key_T && !(pEvent_->modifiers() & Qt::ShiftModifier)){//t _pData->switchTrackOnly(); updateGL(); } else if (pEvent_->key() == Qt::Key_T && (pEvent_->modifiers() & Qt::ShiftModifier)){ //T _pData->_bToneMapper = !_pData->_bToneMapper; updateGL(); } else if (pEvent_->key() == Qt::Key_P && !(pEvent_->modifiers() & Qt::ShiftModifier)){ _pData->switchCapturing(); updateGL(); } else if (pEvent_->key() == Qt::Key_P && (pEvent_->modifiers() & Qt::ShiftModifier)){ _pData->switchContinuous(); updateGL(); } else if (pEvent_->key() == Qt::Key_Escape && !(pEvent_->modifiers() & Qt::ShiftModifier)){ QCoreApplication::instance()->quit(); } else if (pEvent_->key() == Qt::Key_F && (pEvent_->modifiers() & Qt::ShiftModifier)){ if (!isFullScreen()){ toggleFullScreen(); } else{ setFullScreen(false); resize(1280, 960); } } else if (pEvent_->key() == Qt::Key_M ){ updateGL(); } else if (pEvent_->key() == Qt::Key_Z && !(pEvent_->modifiers() & Qt::ShiftModifier)){ //'z' _pData->_bExportRT = true; updateGL(); } QGLViewer::keyPressEvent(pEvent_); }
Matrix4f Camera::getViewMatrix() const { Affine3f view; view.setIdentity(); view.translate(-zoom*Z_AXIS).rotate(rotation).translate(-center); return view.matrix(); }