mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 20:02:53 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // 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 <QTimer>
 | |
| #include <QtGui/QApplication>
 | |
| #include <QtGui/QMainWindow>
 | |
| #include <QtOpenGL/QGLWidget>
 | |
| #include <map>
 | |
| #include "camera.h"
 | |
| #include "gpuhelper.h"
 | |
| #include "trackball.h"
 | |
| 
 | |
| 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
 | 
