00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef INPUT_FIXED_MATRIX_GETTER_H
00028 #define INPUT_FIXED_MATRIX_GETTER_H
00029
00030
00031 #include <PVLE/Input/MatrixGetter.h>
00032
00035 class FixedMatrixGetter : public MatrixGetter {
00036 public:
00037 FixedMatrixGetter() { setByFrame( osg::Vec3(100,0,10), osg::Vec3(-1,0,0), osg::Vec3(0,0,1)); }
00038 FixedMatrixGetter(const osg::Vec3 & EyePos, const osg::Vec3 & Dir, const osg::Vec3 & Up) { setByFrame(EyePos, Dir, Up); }
00039 FixedMatrixGetter(const osg::Matrix & matrix) { setByMatrix(matrix); }
00040
00043 void setByFrame(const osg::Vec3 & EyePos, osg::Vec3 Dir, osg::Vec3 Up) {
00044 Dir.normalize();
00045 Up.normalize();
00046 setByInverseMatrix(osg::Matrix::lookAt(EyePos, EyePos+Dir, Up));
00047 }
00048
00049 void setByMatrix(const osg::Matrix & matrix) {
00050 mat = osg::Matrix::rotate(-osg::PI_2, osg::Vec3(1,0,0)) * matrix;
00051 invMat = osg::Matrix::inverse(matrix) * osg::Matrix::rotate(osg::PI_2, osg::Vec3(1,0,0));
00052 }
00053 void setByInverseMatrix(const osg::Matrix & matrix) {
00054 invMat = matrix * osg::Matrix::rotate(osg::PI_2, osg::Vec3(1,0,0));
00055 mat = osg::Matrix::rotate(-osg::PI_2, osg::Vec3(1,0,0)) * osg::Matrix::inverse(matrix);
00056 }
00057
00058 virtual osg::Matrix getMatrix() const { return mat; }
00059 virtual osg::Matrix getInverseMatrix() const { return invMat; }
00060
00061 protected:
00062 osg::Matrix mat, invMat;
00063 };
00064
00065 #endif // INPUT_FIXED_MATRIX_GETTER_H