diff options
Diffstat (limited to 'eigen/demos/opengl/quaternion_demo.h')
-rw-r--r-- | eigen/demos/opengl/quaternion_demo.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/eigen/demos/opengl/quaternion_demo.h b/eigen/demos/opengl/quaternion_demo.h new file mode 100644 index 0000000..dbff46c --- /dev/null +++ b/eigen/demos/opengl/quaternion_demo.h @@ -0,0 +1,114 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_QUATERNION_DEMO_H +#define EIGEN_QUATERNION_DEMO_H + +#include "gpuhelper.h" +#include "camera.h" +#include "trackball.h" +#include <map> +#include <QTimer> +#include <QtGui/QApplication> +#include <QtOpenGL/QGLWidget> +#include <QtGui/QMainWindow> + +class RenderingWidget : public QGLWidget +{ + Q_OBJECT + + typedef std::map<float,Frame> TimeLine; + TimeLine m_timeline; + Frame lerpFrame(float t); + + Frame mInitFrame; + bool mAnimate; + float m_alpha; + + enum TrackMode { + TM_NO_TRACK=0, TM_ROTATE_AROUND, TM_ZOOM, + TM_LOCAL_ROTATE, TM_FLY_Z, TM_FLY_PAN + }; + + enum NavMode { + NavTurnAround, + NavFly + }; + + enum LerpMode { + LerpQuaternion, + LerpEulerAngles + }; + + enum RotationMode { + RotationStable, + RotationStandard + }; + + Camera mCamera; + TrackMode mCurrentTrackingMode; + NavMode mNavMode; + LerpMode mLerpMode; + RotationMode mRotationMode; + Vector2i mMouseCoords; + Trackball mTrackball; + + QTimer m_timer; + + void setupCamera(); + + std::vector<Vector3f> mVertices; + std::vector<Vector3f> mNormals; + std::vector<int> mIndices; + + protected slots: + + virtual void animate(void); + virtual void drawScene(void); + + virtual void grabFrame(void); + virtual void stopAnimation(); + + virtual void setNavMode(int); + virtual void setLerpMode(int); + virtual void setRotationMode(int); + virtual void resetCamera(); + + protected: + + virtual void initializeGL(); + virtual void resizeGL(int width, int height); + virtual void paintGL(); + + //-------------------------------------------------------------------------------- + virtual void mousePressEvent(QMouseEvent * e); + virtual void mouseReleaseEvent(QMouseEvent * e); + virtual void mouseMoveEvent(QMouseEvent * e); + virtual void keyPressEvent(QKeyEvent * e); + //-------------------------------------------------------------------------------- + + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + RenderingWidget(); + ~RenderingWidget() { } + + QWidget* createNavigationControlWidget(); +}; + +class QuaternionDemo : public QMainWindow +{ + Q_OBJECT + public: + QuaternionDemo(); + protected: + RenderingWidget* mRenderingWidget; +}; + +#endif // EIGEN_QUATERNION_DEMO_H |