Camera stuff -- empty implementations of compute_primary_ray
This commit is contained in:
parent
fb6920e923
commit
764afab8ac
4 changed files with 68 additions and 53 deletions
|
@ -6,6 +6,7 @@ Import('env')
|
|||
|
||||
files = Split("""
|
||||
basics.cc
|
||||
camera.cc
|
||||
light.cc
|
||||
material.cc
|
||||
object.cc
|
||||
|
|
38
src/camera.c
38
src/camera.c
|
@ -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
39
src/camera.cc
Normal 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;
|
||||
}
|
43
src/camera.h
43
src/camera.h
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue