Esempio n. 1
0
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_);
}
Esempio n. 2
0
Matrix4f Camera::getViewMatrix() const {
    Affine3f view;
    view.setIdentity();
    view.translate(-zoom*Z_AXIS).rotate(rotation).translate(-center);
    return view.matrix();
}