diff options
author | don bright <hugh.m.bright@gmail.com> | 2013-02-26 04:32:57 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2013-02-26 04:32:57 (GMT) |
commit | 50489c4287d5eabf636c4cc5c558f56ab210bc27 (patch) | |
tree | f5e084bd57ea38b26d8f556c81e5b66839d15ded /src/linalg.h | |
parent | 86e017ee9a0104dd428abc7ca4c799e34482d003 (diff) |
begin to implement --viewport option, by adding Camera class + children
Diffstat (limited to 'src/linalg.h')
-rw-r--r-- | src/linalg.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/linalg.h b/src/linalg.h index 1f9ed30..31cd922 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -40,4 +40,57 @@ public: bool isValid() const { return this->minCoeff() >= 0.0f; } }; + + +// FIXME - for camera, use boost::variant like in value.cc + +#include <vector> + + +class Camera +{ +public: + enum camera_type_e { GIMBAL_CAMERA, VECTOR_CAMERA, NULL_CAMERA } camtype; + Camera() { camtype = NULL_CAMERA; } + virtual ~Camera() {} // only prevent 'not polymorphic' compile error +}; + +class GimbalCamera : public Camera +{ +public: + GimbalCamera() + { + camtype = GIMBAL_CAMERA; + object_trans << 0,0,0; + object_rot << 35,0,25; + viewer_distance = 500; + } + void setup( std::vector<double> d ) + { + assert( d.size() == 7 ); + object_trans << d[0], d[1], d[2]; + object_rot << d[3], d[4], d[5]; + viewer_distance = d[6]; + } + Eigen::Vector3d object_trans; + Eigen::Vector3d object_rot; + double viewer_distance; +}; + +class VectorCamera : public Camera +{ +public: + VectorCamera() + { + camtype = VECTOR_CAMERA; + center << 0,0,0; + Eigen::Vector3d cameradir(1, 1, -0.5); + eye = center - 500 * cameradir; + // "up" not currently used + } + Eigen::Vector3d eye; + Eigen::Vector3d center; // (aka 'target') + Eigen::Vector3d up; +}; + #endif |