Camera doesn't inherit from Object; defines its own origin.
This commit is contained in:
parent
709453adcb
commit
c564791d1a
3 changed files with 36 additions and 9 deletions
|
@ -29,6 +29,27 @@ Camera::~Camera()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Camera::GetOrigin --
|
||||||
|
*/
|
||||||
|
const Vector3&
|
||||||
|
Camera::GetOrigin()
|
||||||
|
const
|
||||||
|
{
|
||||||
|
return mOrigin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Camera::SetOrigin --
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
Camera::SetOrigin(const Vector3 &origin)
|
||||||
|
{
|
||||||
|
mOrigin = origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Vector3&
|
const Vector3&
|
||||||
Camera::get_direction()
|
Camera::get_direction()
|
||||||
const
|
const
|
||||||
|
@ -101,7 +122,7 @@ PerspectiveCamera::compute_primary_ray(const int x,
|
||||||
Vector3 direction = LinearCombination(1.0, get_direction(),
|
Vector3 direction = LinearCombination(1.0, get_direction(),
|
||||||
x0, GetRight(),
|
x0, GetRight(),
|
||||||
y0, GetUp());
|
y0, GetUp());
|
||||||
return Ray(get_origin(), direction);
|
return Ray(GetOrigin(), direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Orthographic Camera
|
#pragma mark - Orthographic Camera
|
||||||
|
@ -139,7 +160,7 @@ OrthographicCamera::compute_primary_ray(const int x,
|
||||||
double x0 = (x + 0.5) / width + 0.5;
|
double x0 = (x + 0.5) / width + 0.5;
|
||||||
double y0 = ((height - 1.0) - (y - 0.5)) / height - 0.5;
|
double y0 = ((height - 1.0) - (y - 0.5)) / height - 0.5;
|
||||||
|
|
||||||
Vector3 origin = LinearCombination(1.0, get_origin(),
|
Vector3 origin = LinearCombination(1.0, GetOrigin(),
|
||||||
x0, GetRight(),
|
x0, GetRight(),
|
||||||
y0, GetUp());
|
y0, GetUp());
|
||||||
return Ray(origin, get_direction());
|
return Ray(origin, get_direction());
|
||||||
|
|
18
src/camera.h
18
src/camera.h
|
@ -11,23 +11,23 @@
|
||||||
#define __CAMERA_H__
|
#define __CAMERA_H__
|
||||||
|
|
||||||
#include "basics.h"
|
#include "basics.h"
|
||||||
#include "object.h"
|
|
||||||
|
|
||||||
|
|
||||||
struct Camera
|
struct Camera
|
||||||
: public Object
|
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
Camera();
|
Camera();
|
||||||
Camera(const Camera& other);
|
Camera(const Camera& other);
|
||||||
virtual ~Camera();
|
virtual ~Camera();
|
||||||
|
|
||||||
const Vector3 &get_direction() const;
|
const Vector3& GetOrigin() const;
|
||||||
void set_direction(const Vector3 &d);
|
void SetOrigin(const Vector3& origin);
|
||||||
float get_angle() const;
|
|
||||||
|
const Vector3& get_direction() const;
|
||||||
|
void set_direction(const Vector3& direction);
|
||||||
|
|
||||||
const Vector3& GetRight() const;
|
const Vector3& GetRight() const;
|
||||||
void SetRight(const Vector3& right);
|
void SetRight(const Vector3& right);
|
||||||
|
|
||||||
const Vector3& GetUp() const;
|
const Vector3& GetUp() const;
|
||||||
void SetUp(const Vector3& up);
|
void SetUp(const Vector3& up);
|
||||||
|
|
||||||
|
@ -35,6 +35,12 @@ public:
|
||||||
const int y, const int height) const = 0;
|
const int y, const int height) const = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* The location of the camera in the scene. Depending on the type of camera,
|
||||||
|
* this is the point from which rays will be emitted.
|
||||||
|
*/
|
||||||
|
Vector3 mOrigin;
|
||||||
|
|
||||||
/** A normalized vector defining where the camera is pointed. */
|
/** A normalized vector defining where the camera is pointed. */
|
||||||
Vector3 mDirection;
|
Vector3 mDirection;
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ CameraParser::HandleOriginEvent(yaml_event_t& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
auto onDone = [this](Vector3 origin) {
|
auto onDone = [this](Vector3 origin) {
|
||||||
mCamera->set_origin(origin);
|
mCamera->SetOrigin(origin);
|
||||||
mSection = NoSection;
|
mSection = NoSection;
|
||||||
SetShouldExpectKey(true);
|
SetShouldExpectKey(true);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue