xref: /aosp_15_r20/external/eigen/demos/opengl/trackball.h (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
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_TRACKBALL_H
11*bf2c3715SXin Li #define EIGEN_TRACKBALL_H
12*bf2c3715SXin Li 
13*bf2c3715SXin Li #include <Eigen/Geometry>
14*bf2c3715SXin Li 
15*bf2c3715SXin Li class Camera;
16*bf2c3715SXin Li 
17*bf2c3715SXin Li class Trackball
18*bf2c3715SXin Li {
19*bf2c3715SXin Li   public:
20*bf2c3715SXin Li 
21*bf2c3715SXin Li     enum Mode {Around, Local};
22*bf2c3715SXin Li 
Trackball()23*bf2c3715SXin Li     Trackball() : mpCamera(0) {}
24*bf2c3715SXin Li 
25*bf2c3715SXin Li     void start(Mode m = Around) { mMode = m; mLastPointOk = false; }
26*bf2c3715SXin Li 
setCamera(Camera * pCam)27*bf2c3715SXin Li     void setCamera(Camera* pCam) { mpCamera = pCam; }
28*bf2c3715SXin Li 
29*bf2c3715SXin Li     void track(const Eigen::Vector2i& newPoint2D);
30*bf2c3715SXin Li 
31*bf2c3715SXin Li   protected:
32*bf2c3715SXin Li 
33*bf2c3715SXin Li     bool mapToSphere( const Eigen::Vector2i& p2, Eigen::Vector3f& v3);
34*bf2c3715SXin Li 
35*bf2c3715SXin Li     Camera* mpCamera;
36*bf2c3715SXin Li     Eigen::Vector3f mLastPoint3D;
37*bf2c3715SXin Li     Mode mMode;
38*bf2c3715SXin Li     bool mLastPointOk;
39*bf2c3715SXin Li 
40*bf2c3715SXin Li };
41*bf2c3715SXin Li 
42*bf2c3715SXin Li #endif // EIGEN_TRACKBALL_H
43