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