summaryrefslogtreecommitdiff
path: root/src/linalg.h
diff options
context:
space:
mode:
authordon bright <hugh.m.bright@gmail.com>2013-02-26 04:32:57 (GMT)
committerdon bright <hugh.m.bright@gmail.com>2013-02-26 04:32:57 (GMT)
commit50489c4287d5eabf636c4cc5c558f56ab210bc27 (patch)
treef5e084bd57ea38b26d8f556c81e5b66839d15ded /src/linalg.h
parent86e017ee9a0104dd428abc7ca4c799e34482d003 (diff)
begin to implement --viewport option, by adding Camera class + children
Diffstat (limited to 'src/linalg.h')
-rw-r--r--src/linalg.h53
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
contact: Jan Huwald // Impressum