mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 20:02:53 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.2 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_CAMERA_H
 | |
| #define EIGEN_CAMERA_H
 | |
| 
 | |
| #include <Eigen/Geometry>
 | |
| #include <QObject>
 | |
| // #include <frame.h>
 | |
| 
 | |
| class Frame {
 | |
|  public:
 | |
|   EIGEN_MAKE_ALIGNED_OPERATOR_NEW
 | |
| 
 | |
|   inline Frame(const Eigen::Vector3f& pos = Eigen::Vector3f::Zero(),
 | |
|                const Eigen::Quaternionf& o = Eigen::Quaternionf())
 | |
|       : orientation(o), position(pos) {}
 | |
|   Frame lerp(float alpha, const Frame& other) const {
 | |
|     return Frame((1.f - alpha) * position + alpha * other.position,
 | |
|                  orientation.slerp(alpha, other.orientation));
 | |
|   }
 | |
| 
 | |
|   Eigen::Quaternionf orientation;
 | |
|   Eigen::Vector3f position;
 | |
| };
 | |
| 
 | |
| class Camera {
 | |
|  public:
 | |
|   EIGEN_MAKE_ALIGNED_OPERATOR_NEW
 | |
| 
 | |
|   Camera(void);
 | |
| 
 | |
|   Camera(const Camera& other);
 | |
| 
 | |
|   virtual ~Camera();
 | |
| 
 | |
|   Camera& operator=(const Camera& other);
 | |
| 
 | |
|   void setViewport(uint offsetx, uint offsety, uint width, uint height);
 | |
|   void setViewport(uint width, uint height);
 | |
| 
 | |
|   inline uint vpX(void) const { return mVpX; }
 | |
|   inline uint vpY(void) const { return mVpY; }
 | |
|   inline uint vpWidth(void) const { return mVpWidth; }
 | |
|   inline uint vpHeight(void) const { return mVpHeight; }
 | |
| 
 | |
|   inline float fovY(void) const { return mFovY; }
 | |
|   void setFovY(float value);
 | |
| 
 | |
|   void setPosition(const Eigen::Vector3f& pos);
 | |
|   inline const Eigen::Vector3f& position(void) const { return mFrame.position; }
 | |
| 
 | |
|   void setOrientation(const Eigen::Quaternionf& q);
 | |
|   inline const Eigen::Quaternionf& orientation(void) const {
 | |
|     return mFrame.orientation;
 | |
|   }
 | |
| 
 | |
|   void setFrame(const Frame& f);
 | |
|   const Frame& frame(void) const { return mFrame; }
 | |
| 
 | |
|   void setDirection(const Eigen::Vector3f& newDirection);
 | |
|   Eigen::Vector3f direction(void) const;
 | |
|   void setUp(const Eigen::Vector3f& vectorUp);
 | |
|   Eigen::Vector3f up(void) const;
 | |
|   Eigen::Vector3f right(void) const;
 | |
| 
 | |
|   void setTarget(const Eigen::Vector3f& target);
 | |
|   inline const Eigen::Vector3f& target(void) { return mTarget; }
 | |
| 
 | |
|   const Eigen::Affine3f& viewMatrix(void) const;
 | |
|   const Eigen::Matrix4f& projectionMatrix(void) const;
 | |
| 
 | |
|   void rotateAroundTarget(const Eigen::Quaternionf& q);
 | |
|   void localRotate(const Eigen::Quaternionf& q);
 | |
|   void zoom(float d);
 | |
| 
 | |
|   void localTranslate(const Eigen::Vector3f& t);
 | |
| 
 | |
|   /** Setup OpenGL matrices and viewport */
 | |
|   void activateGL(void);
 | |
| 
 | |
|   Eigen::Vector3f unProject(const Eigen::Vector2f& uv, float depth,
 | |
|                             const Eigen::Matrix4f& invModelview) const;
 | |
|   Eigen::Vector3f unProject(const Eigen::Vector2f& uv, float depth) const;
 | |
| 
 | |
|  protected:
 | |
|   void updateViewMatrix(void) const;
 | |
|   void updateProjectionMatrix(void) const;
 | |
| 
 | |
|  protected:
 | |
|   uint mVpX, mVpY;
 | |
|   uint mVpWidth, mVpHeight;
 | |
| 
 | |
|   Frame mFrame;
 | |
| 
 | |
|   mutable Eigen::Affine3f mViewMatrix;
 | |
|   mutable Eigen::Matrix4f mProjectionMatrix;
 | |
| 
 | |
|   mutable bool mViewIsUptodate;
 | |
|   mutable bool mProjIsUptodate;
 | |
| 
 | |
|   // used by rotateAroundTarget
 | |
|   Eigen::Vector3f mTarget;
 | |
| 
 | |
|   float mFovY;
 | |
|   float mNearDist;
 | |
|   float mFarDist;
 | |
| };
 | |
| 
 | |
| #endif  // EIGEN_CAMERA_H
 | 
