Camera stuff -- empty implementations of compute_primary_ray

This commit is contained in:
Eryn Wells 2013-09-16 16:34:48 -07:00
parent fb6920e923
commit 764afab8ac
4 changed files with 68 additions and 53 deletions

View file

@ -6,6 +6,7 @@ Import('env')
files = Split("""
basics.cc
camera.cc
light.cc
material.cc
object.cc

View file

@ -1,38 +0,0 @@
/* camera.c
*
* Camera definitions.
*
* Eryn Wells <eryn@erynwells.me>
*/
#include <stdlib.h>
#include "camera.h"
Camera *
camera_init()
{
Camera *new_camera = malloc(sizeof(Camera));
if (new_camera == NULL) {
return NULL;
}
// Set some useful defaults.
new_camera->projection = CameraProjectionOrthographic;
new_camera->location = vector_init(0, 0, 0);
// The default image plane is a rectangle from (-1, 1) to (1, -1).
new_camera->image_plane = rect_init(-1, 1, 2, 2);
return new_camera;
}
void
camera_destroy(Camera *camera)
{
if (camera == NULL) {
return;
}
free(camera);
}

39
src/camera.cc Normal file
View file

@ -0,0 +1,39 @@
/* camera.h
*
* The Camera is the eye into the scene. It defines several parameters and a single compute_primary_ray method
* that generates rays with which the ray tracer draws the scene.
*
* Eryn Wells <eryn@erynwells.me>
*/
#include "camera.h"
#pragma mark - Generic Camera
Camera::Camera()
: height(Vector3::Y),
width(4.0 / 3.0 * Vector3::X),
direction(Vector3::Z)
{ }
Camera::~Camera()
{ }
#pragma mark - Orthographic Camera
/*
* OrthographicCamera::compute_primary_ray --
*
* Compute a primary ray given an (x,y) coordinate pair. The orthographic camera projects rays parallel to the viewing
* direction through the (x,y) coordinate given. Thus, the size of the orthographic camera should be set to the size of
* the view into the scene.
*/
Ray
OrthographicCamera::compute_primary_ray(const int &x,
const int &y)
const
{
return 0;
}

View file

@ -1,31 +1,44 @@
/* camera.h
*
* Camera type and related functions.
* The Camera is the eye into the scene. It defines several parameters and a single compute_primary_ray method
* that generates rays with which the ray tracer draws the scene.
*
* Eryn Wells <eryn@erynwells.me>
*/
#ifndef __CAMERA_H
#define __CAMERA_H
#ifndef __CAMERA_H__
#define __CAMERA_H__
#include "basics.h"
#include "object.h"
typedef enum {
CameraProjectionOrthographic = 1,
} CameraProjection;
typedef struct _Camera
class Camera
: public Object
{
CameraProjection projection;
Vector3 location;
Rect image_plane;
} Camera;
public:
Camera();
~Camera();
virtual Ray compute_primary_ray(const int &x, const int &y) const = 0;
private:
// Size of the image plane.
Vector3 height, width;
// Direction. A unit vector defining where the camera is pointed.
Vector3 direction;
// Horizontal viewing angle.
float angle;
};
Camera *camera_init();
void camera_destroy(Camera *camera);
class OrthographicCamera
{
public:
Ray compute_primary_ray(const int &x, const int &y) const;
};
#endif