summaryrefslogtreecommitdiffstats
path: root/libdimension/cameras.c
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/cameras.c
parent7e7ec10dea751540eda7898cf83f8471185aa063 (diff)
downloaddimension-bbe317fb2bde1b2b88df66e5426c9ee78e40a0b6.tar.xz
Have camera callbacks take canvas coordinates as doubles.
Diffstat (limited to 'libdimension/cameras.c')
-rw-r--r--libdimension/cameras.c11
1 files changed, 3 insertions, 8 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);
}