• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // This file is part of Eigen, a lightweight C++ template library
2  // for linear algebra.
3  //
4  // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5  //
6  // This Source Code Form is subject to the terms of the Mozilla
7  // Public License v. 2.0. If a copy of the MPL was not distributed
8  // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9  
10  #ifndef EIGEN_QUATERNION_DEMO_H
11  #define EIGEN_QUATERNION_DEMO_H
12  
13  #include "gpuhelper.h"
14  #include "camera.h"
15  #include "trackball.h"
16  #include <map>
17  #include <QTimer>
18  #include <QtGui/QApplication>
19  #include <QtOpenGL/QGLWidget>
20  #include <QtGui/QMainWindow>
21  
22  class RenderingWidget : public QGLWidget
23  {
24    Q_OBJECT
25  
26      typedef std::map<float,Frame> TimeLine;
27      TimeLine m_timeline;
28      Frame lerpFrame(float t);
29  
30      Frame mInitFrame;
31      bool mAnimate;
32      float m_alpha;
33  
34      enum TrackMode {
35        TM_NO_TRACK=0, TM_ROTATE_AROUND, TM_ZOOM,
36        TM_LOCAL_ROTATE, TM_FLY_Z, TM_FLY_PAN
37      };
38  
39      enum NavMode {
40        NavTurnAround,
41        NavFly
42      };
43  
44      enum LerpMode {
45        LerpQuaternion,
46        LerpEulerAngles
47      };
48  
49      enum RotationMode {
50        RotationStable,
51        RotationStandard
52      };
53  
54      Camera mCamera;
55      TrackMode mCurrentTrackingMode;
56      NavMode mNavMode;
57      LerpMode mLerpMode;
58      RotationMode mRotationMode;
59      Vector2i mMouseCoords;
60      Trackball mTrackball;
61  
62      QTimer m_timer;
63  
64      void setupCamera();
65  
66      std::vector<Vector3f> mVertices;
67      std::vector<Vector3f> mNormals;
68      std::vector<int> mIndices;
69  
70    protected slots:
71  
72      virtual void animate(void);
73      virtual void drawScene(void);
74  
75      virtual void grabFrame(void);
76      virtual void stopAnimation();
77  
78      virtual void setNavMode(int);
79      virtual void setLerpMode(int);
80      virtual void setRotationMode(int);
81      virtual void resetCamera();
82  
83    protected:
84  
85      virtual void initializeGL();
86      virtual void resizeGL(int width, int height);
87      virtual void paintGL();
88  
89      //--------------------------------------------------------------------------------
90      virtual void mousePressEvent(QMouseEvent * e);
91      virtual void mouseReleaseEvent(QMouseEvent * e);
92      virtual void mouseMoveEvent(QMouseEvent * e);
93      virtual void keyPressEvent(QKeyEvent * e);
94      //--------------------------------------------------------------------------------
95  
96    public:
97      EIGEN_MAKE_ALIGNED_OPERATOR_NEW
98  
99      RenderingWidget();
~RenderingWidget()100      ~RenderingWidget() { }
101  
102      QWidget* createNavigationControlWidget();
103  };
104  
105  class QuaternionDemo : public QMainWindow
106  {
107    Q_OBJECT
108    public:
109      QuaternionDemo();
110    protected:
111      RenderingWidget* mRenderingWidget;
112  };
113  
114  #endif // EIGEN_QUATERNION_DEMO_H
115