summaryrefslogtreecommitdiff
path: root/src/Camera.h
diff options
context:
space:
mode:
authordon bright <hugh.m.bright@gmail.com>2013-03-03 16:52:25 (GMT)
committerdon bright <hugh.m.bright@gmail.com>2013-03-03 16:52:25 (GMT)
commit2b2dc7a078e92193f0d27d901d3a1b4af9f5a1d9 (patch)
treed8c6600a1232e137833b6087a83531edca0af1dc /src/Camera.h
parentbfae32fe9909446cb4254fc5a5d953227736575a (diff)
make Camera into single class, simplify code
Diffstat (limited to 'src/Camera.h')
-rw-r--r--src/Camera.h88
1 files changed, 46 insertions, 42 deletions
diff --git a/src/Camera.h b/src/Camera.h
index 8dd6f68..b35ef0c 100644
--- a/src/Camera.h
+++ b/src/Camera.h
@@ -1,64 +1,68 @@
#ifndef OPENSCAD_CAMERA_H_
#define OPENSCAD_CAMERA_H_
-// Cameras
-// For usage, see GLView.cc / export_png.cc / openscad.cc
+/*
+
+Camera
+
+For usage, see *View.cc / export_png.cc / openscad.cc
+
+There are two different types of cameras represented in this class:
+
+*Gimbal camera - uses Euler Angles, object translation, and viewer distance
+*Vector camera - uses 'eye', 'center', and 'up' vectors ('lookat' style)
+
+*/
#include <vector>
#include <Eigen/Geometry>
#include <boost/variant.hpp>
-class GimbalCamera
+class Camera
{
public:
- GimbalCamera()
- {
- object_trans << 0,0,0;
- object_rot << 35,0,25;
- viewer_distance = 500;
+ enum CameraType { NONE, GIMBAL, VECTOR } type;
+ Camera() {
+ type = Camera::NONE;
}
- GimbalCamera( std::vector<double> d )
+ Camera( enum CameraType e )
{
- assert( d.size() == 7 );
- object_trans << d[0], d[1], d[2];
- object_rot << d[3], d[4], d[5];
- viewer_distance = d[6];
+ type = e;
+ if ( e == Camera::GIMBAL ) {
+ object_trans << 0,0,0;
+ object_rot << 35,0,25;
+ viewer_distance = 500;
+ } else if ( e == Camera::VECTOR ) {
+ center << 0,0,0;
+ Eigen::Vector3d cameradir(1, 1, -0.5);
+ eye = center - 500 * cameradir;
+ }
}
- Eigen::Vector3d object_trans;
- Eigen::Vector3d object_rot;
- double viewer_distance;
-};
-class VectorCamera
-{
-public:
- VectorCamera()
- {
- center << 0,0,0;
- Eigen::Vector3d cameradir(1, 1, -0.5);
- eye = center - 500 * cameradir;
- // "up" not currently used
- }
- VectorCamera( std::vector<double> d )
- {
- assert( d.size() == 6 );
- eye << d[0], d[1], d[2];
- center << d[3], d[4], d[5];
+ void setup( std::vector<double> params ) {
+ if ( params.size() == 7 ) {
+ type = Camera::GIMBAL;
+ object_trans << params[0], params[1], params[2];
+ object_rot << params[3], params[4], params[5];
+ viewer_distance = params[6];
+ } else if ( params.size() == 6 ) {
+ type = Camera::VECTOR;
+ eye << params[0], params[1], params[2];
+ center << params[3], params[4], params[5];
+ } else {
+ assert( "Gimbal cam needs 7 numbers, Vector camera needs 6" );
+ }
}
+
+ // Vectorcam
Eigen::Vector3d eye;
Eigen::Vector3d center; // (aka 'target')
Eigen::Vector3d up;
-};
-class Camera
-{
-public:
- enum CameraType { NONE, GIMBAL, VECTOR } type;
- Camera() { type = Camera::NONE; }
- void set( VectorCamera &c ) { vcam = c; type = Camera::VECTOR; }
- void set( GimbalCamera &c ) { gcam = c; type = Camera::GIMBAL; }
- GimbalCamera gcam;
- VectorCamera vcam;
+ // Gimbalcam
+ Eigen::Vector3d object_trans;
+ Eigen::Vector3d object_rot;
+ double viewer_distance;
};
contact: Jan Huwald // Impressum