Clean up camera module

This commit is contained in:
Eryn Wells 2014-07-19 16:30:26 -07:00
parent 41327c92fd
commit daf5c7d8a6
2 changed files with 25 additions and 56 deletions

View file

@ -12,9 +12,7 @@
#pragma mark - Generic Camera #pragma mark - Generic Camera
Camera::Camera() Camera::Camera()
: height(Vector3::Y), : direction(Vector3::Z),
width(4.0 / 3.0 * Vector3::X),
direction(Vector3::Z),
mRight(1.33, 0, 0), mRight(1.33, 0, 0),
mUp(Vector3::Y) mUp(Vector3::Y)
{ } { }
@ -24,41 +22,6 @@ Camera::~Camera()
{ } { }
/*
* Camera::get_width --
* Camera::set_width --
* Camera::get_height --
* Camera::set_height --
*
* Get and set width and height vectors.
*/
const Vector3 &
Camera::get_width()
const
{
return width;
}
void
Camera::set_width(const Vector3 &w)
{
width = w;
}
const Vector3 &
Camera::get_height()
const
{
return height;
}
void
Camera::set_height(const Vector3 &h)
{
height = h;
}
/* /*
* Camera::get_direction -- * Camera::get_direction --
* Camera::set_direction -- * Camera::set_direction --
@ -148,13 +111,15 @@ OrthographicCamera::compute_primary_ray(const int x,
const int height) const int height)
const const
{ {
// Calculate the point on the image plane that the given (x,y) coordinate pair corresponds to. /*
float dir_x = (x / width) + 0.5; * Center x and y in the pixel and convert them to be coordinates between
float dir_y = (y / height) + 0.5; * -0.5 and 0.5.
Vector3 ray_origin = (dir_x * get_width()) + (dir_y * get_height()) + get_direction(); */
double x0 = (x + 0.5) / width + 0.5;
double y0 = ((height - 1.0) - (y - 0.5)) / height - 0.5;
// Calculate the direction of the ray, given the camera's origin and normalize that vector. Vector3 origin = LinearCombination(1.0, get_origin(),
Vector3 ray_direction = (ray_origin - get_origin()).normalize(); x0, GetRight(),
y0, GetUp());
return Ray(ray_origin, ray_direction); return Ray(origin, get_direction());
} }

View file

@ -1,7 +1,8 @@
/* camera.h /* camera.h
* *
* The Camera is the eye into the scene. It defines several parameters and a single compute_primary_ray method * The Camera is the eye into the scene. It defines several parameters and a
* that generates rays with which the ray tracer draws the scene. * single compute_primary_ray method that generates rays with which the ray
* tracer draws the scene.
* *
* Eryn Wells <eryn@erynwells.me> * Eryn Wells <eryn@erynwells.me>
*/ */
@ -20,10 +21,6 @@ public:
Camera(); Camera();
virtual ~Camera(); virtual ~Camera();
const Vector3 &get_width() const;
void set_width(const Vector3 &w);
const Vector3 &get_height() const;
void set_height(const Vector3 &h);
const Vector3 &get_direction() const; const Vector3 &get_direction() const;
void set_direction(const Vector3 &d); void set_direction(const Vector3 &d);
float get_angle() const; float get_angle() const;
@ -37,12 +34,19 @@ public:
const int y, const int height) const = 0; const int y, const int height) const = 0;
private: private:
// Size of the image plane. /** A normalized vector defining where the camera is pointed. */
Vector3 height, width;
// Direction. A normalized vector defining where the camera is pointed.
Vector3 direction; Vector3 direction;
/**
* A vector defining the width of the camera's image plane. The ratio of
* this and mUp determine the aspect ratio of the image.
*/
Vector3 mRight; Vector3 mRight;
/**
* A vector defining the height of the camera's image plane. The ratio of
* this and mUp determine the aspect ratio of the image.
*/
Vector3 mUp; Vector3 mUp;
}; };