void Math::fromMatrix(const osg::Matrixd& mx, double& x, double& y, double& z, double& h, double& p, double& r) { x = mx.getTrans().x(); y = mx.getTrans().y(); z = mx.getTrans().z(); osg::Vec3 hpr = fromQuat(mx.getRotate()); h = osg::RadiansToDegrees(hpr.x()); p = osg::RadiansToDegrees(hpr.y())-90.0; r = osg::RadiansToDegrees(hpr.z()); }
void ViroManipulator::setByMatrix(const osg::Matrixd& matrix){ this->Disable(GRAVITY); _speed = 0.0; _padEvent = NAVPAD_NONE; _vEye = matrix.getTrans(); osg::Quat q = matrix.getRotate(); double qx,qy,qz,qw; qx = q.x(); qy = q.y(); qz = q.z(); qw = q.w(); _yaw = atan2( 2*qy*qw-2*qx*qz , 1 - 2*qy*qy - 2*qz*qz); _pitch = asin(2*qx*qy + 2*qz*qw); _roll = atan2(2*qx*qw-2*qy*qz , 1 - 2*qx*qz - 2*qz*qz); osg::Quat rot = osg::Quat( (_pitch+osg::PI_2), osg::X_AXIS) * osg::Quat(0.0/*(_roll) */, osg::Y_AXIS) * osg::Quat( (_yaw), osg::Z_AXIS); _qRotation = rot; //matrix.decompose(_vEye, Q, vScale, q); //osg::Matrixd M,Ms; //M = matrix; //M.makeScale(-vScale); //_qRotation = M.getRotate(); /* osg::Vec3d vScale,E,T,U; osg::Quat Q; matrix.getLookAt(E, T, U ); matrix.decompose(_vEye, _qRotation, vScale, Q); _vEye = matrix.getTrans(); //osg::Vec3d vLook = -osg::Z_AXIS * matrix; //vLook = matrix.getScale() ^ (-vLook); //_vTarget = vLook + _vEye; //_vUp = osg::Z_AXIS; //matrix.getScale(); //matrix.get( _qRotation ); //matrix.getLookAt( _vEye, _vTarget, _vUp ); //computePosition( _vEye, _vTarget, osg::Z_AXIS ); //_qRotation.set( matrix ); //SyncData( matrix.getRotate() ); //SyncData(_qRotation); computePosition( _vEye, T, U ); SyncData(); //computePosition( matrix.getTrans(), (matrix.getTrans()+matrix.get), osg::Z_AXIS ); */ SyncData(); }
void TopView::setByMatrix(const osg::Matrixd& matrix) { eye = matrix.getTrans(); }
void HumanController::setByInverseMatrix(const osg::Matrixd& matrix) { _eye = -matrix.getTrans(); }
void DriveManipulator::setByMatrix(const osg::Matrixd& matrix) { _eye = matrix.getTrans(); _rotation = matrix.getRotate(); }
void GliderManipulator::setByMatrix(const osg::Matrixd& matrix) { _eye = matrix.getTrans(); _rotation = matrix.getRotate(); _distance = 1.0f; }
void KeyPadCameraManipulator::setByMatrix(const osg::Matrixd& matrix) { _pos = matrix.getTrans(); _ori = getHPRfromQuat(matrix.getRotate()); }
void KeyPadEventHandler::setByMatrix(const osg::Matrixd& matrix) { _pos = matrix.getTrans(); _ori = getHPRfromQuat(matrix.getRotate()); }