summaryrefslogtreecommitdiffstats
path: root/libdimension
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2009-07-16 21:31:51 +0000
committerTavian Barnes <tavianator@gmail.com>2009-07-16 21:31:51 +0000
commitbbe317fb2bde1b2b88df66e5426c9ee78e40a0b6 (patch)
tree0406204d223c4a4ddd3a6aaa51c69db88114e3d5 /libdimension
parent7e7ec10dea751540eda7898cf83f8471185aa063 (diff)
downloaddimension-bbe317fb2bde1b2b88df66e5426c9ee78e40a0b6.tar.xz
Have camera callbacks take canvas coordinates as doubles.
Diffstat (limited to 'libdimension')
-rw-r--r--libdimension/cameras.c11
-rw-r--r--libdimension/dimension/camera.h3
-rw-r--r--libdimension/raytrace.c4
3 files changed, 7 insertions, 11 deletions
diff --git a/libdimension/cameras.c b/libdimension/cameras.c
index dfe4708..9e0642f 100644
--- a/libdimension/cameras.c
+++ b/libdimension/cameras.c
@@ -26,9 +26,7 @@
/* Perspective camera ray callback */
static dmnsn_line dmnsn_perspective_camera_ray_fn(const dmnsn_camera *camera,
- const dmnsn_canvas *canvas,
- unsigned int x,
- unsigned int y);
+ double x, double y);
/* Create a new perspective camera. Rays are aimed from the origin to a screen
located on the z = 1 frame, from (-0.5, -0.5) to (0.5, 0.5). Rays are then
@@ -73,8 +71,7 @@ dmnsn_set_perspective_camera_trans(dmnsn_camera *camera, dmnsn_matrix T)
/* Perspective camera ray callback */
static dmnsn_line
dmnsn_perspective_camera_ray_fn(const dmnsn_camera *camera,
- const dmnsn_canvas *canvas,
- unsigned int x, unsigned int y)
+ double x, double y)
{
dmnsn_matrix *trans = camera->ptr;
dmnsn_line l;
@@ -83,9 +80,7 @@ dmnsn_perspective_camera_ray_fn(const dmnsn_camera *camera,
l.x0 = dmnsn_vector_construct(0.0, 0.0, 0.0);
/* Aim at the z = 1 plane */
- l.n.x = ((double)x)/(canvas->x - 1) - 0.5;
- l.n.y = ((double)y)/(canvas->y - 1) - 0.5;
- l.n.z = 1.0;
+ l.n = dmnsn_vector_construct(x - 0.5, y - 0.5, 1.0);
return dmnsn_matrix_line_mul(*trans, l);
}
diff --git a/libdimension/dimension/camera.h b/libdimension/dimension/camera.h
index 3e6da4f..5e7b253 100644
--- a/libdimension/dimension/camera.h
+++ b/libdimension/dimension/camera.h
@@ -30,8 +30,7 @@ typedef struct dmnsn_camera dmnsn_camera;
/* Camera callback types */
typedef dmnsn_line dmnsn_camera_ray_fn(const dmnsn_camera *camera,
- const dmnsn_canvas *canvas,
- unsigned int x, unsigned int y);
+ double x, double y);
struct dmnsn_camera {
/* Callback functions */
diff --git a/libdimension/raytrace.c b/libdimension/raytrace.c
index 470af4f..df61d6b 100644
--- a/libdimension/raytrace.c
+++ b/libdimension/raytrace.c
@@ -213,7 +213,9 @@ dmnsn_raytrace_scene_impl(dmnsn_progress *progress, dmnsn_scene *scene,
if (scene->quality >= DMNSN_RENDER_OBJECTS) {
/* Get the ray corresponding to the (x,y)'th pixel */
- ray = (*scene->camera->ray_fn)(scene->camera, scene->canvas, x, y);
+ ray = (*scene->camera->ray_fn)(scene->camera,
+ ((double)x)/(scene->canvas->x - 1),
+ ((double)y)/(scene->canvas->y - 1));
/* Shoot a ray */
color = dmnsn_raytrace_shoot(scene, color, ray);
}