| // 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 |