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