diff --git a/src/SConscript b/src/SConscript index 9a62e78..78e012a 100644 --- a/src/SConscript +++ b/src/SConscript @@ -6,6 +6,7 @@ Import('env') files = Split(""" basics.c + camera.c charles.c scene.c """) diff --git a/src/camera.c b/src/camera.c new file mode 100644 index 0000000..2a454ef --- /dev/null +++ b/src/camera.c @@ -0,0 +1,38 @@ +/* camera.c + * + * Camera definitions. + * + * Eryn Wells + */ + +#include +#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); +} diff --git a/src/camera.h b/src/camera.h new file mode 100644 index 0000000..0fd6f32 --- /dev/null +++ b/src/camera.h @@ -0,0 +1,31 @@ +/* camera.h + * + * Camera type and related functions. + * + * Eryn Wells + */ + +#ifndef __CAMERA_H +#define __CAMERA_H + +#include "basics.h" + + +typedef enum { + CameraProjectionOrthographic = 1, +} CameraProjection; + + +typedef struct _Camera +{ + CameraProjection projection; + Vector3 location; + Rect image_plane; +} Camera; + + +Camera *camera_init(); +void camera_destroy(Camera *camera); + + +#endif