You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							114 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							114 lines
						
					
					
						
							2.6 KiB
						
					
					
				
								// 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
							 |