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&
 | 
			
		||||
Camera::get_direction()
 | 
			
		||||
    const
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +122,7 @@ PerspectiveCamera::compute_primary_ray(const int x,
 | 
			
		|||
    Vector3 direction = LinearCombination(1.0, get_direction(),
 | 
			
		||||
                                          x0, GetRight(),
 | 
			
		||||
                                          y0, GetUp());
 | 
			
		||||
    return Ray(get_origin(), direction);
 | 
			
		||||
    return Ray(GetOrigin(), direction);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#pragma mark - Orthographic Camera
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +160,7 @@ OrthographicCamera::compute_primary_ray(const int x,
 | 
			
		|||
    double x0 = (x + 0.5) / width + 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(),
 | 
			
		||||
                                       y0, GetUp());
 | 
			
		||||
    return Ray(origin, get_direction());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								src/camera.h
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								src/camera.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -11,23 +11,23 @@
 | 
			
		|||
#define __CAMERA_H__
 | 
			
		||||
 | 
			
		||||
#include "basics.h"
 | 
			
		||||
#include "object.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct Camera
 | 
			
		||||
    : public Object
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    Camera();
 | 
			
		||||
    Camera(const Camera& other);
 | 
			
		||||
    virtual ~Camera();
 | 
			
		||||
 | 
			
		||||
    const Vector3 &get_direction() const;
 | 
			
		||||
    void set_direction(const Vector3 &d);
 | 
			
		||||
    float get_angle() const;
 | 
			
		||||
    const Vector3& GetOrigin() const;
 | 
			
		||||
    void SetOrigin(const Vector3& origin);
 | 
			
		||||
 | 
			
		||||
    const Vector3& get_direction() const;
 | 
			
		||||
    void set_direction(const Vector3& direction);
 | 
			
		||||
 | 
			
		||||
    const Vector3& GetRight() const;
 | 
			
		||||
    void SetRight(const Vector3& right);
 | 
			
		||||
 | 
			
		||||
    const Vector3& GetUp() const;
 | 
			
		||||
    void SetUp(const Vector3& up);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +35,12 @@ public:
 | 
			
		|||
                                    const int y, const int height) const = 0;
 | 
			
		||||
 | 
			
		||||
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. */
 | 
			
		||||
    Vector3 mDirection;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,7 +102,7 @@ CameraParser::HandleOriginEvent(yaml_event_t& event)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    auto onDone = [this](Vector3 origin) {
 | 
			
		||||
        mCamera->set_origin(origin);
 | 
			
		||||
        mCamera->SetOrigin(origin);
 | 
			
		||||
        mSection = NoSection;
 | 
			
		||||
        SetShouldExpectKey(true);
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue