From b6f1834ac17a11c38091ae0c60e53f8f6320b019 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 6 Nov 2010 02:08:32 -0400 Subject: Factor out transformation code from object callbacks. --- libdimension/sphere.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'libdimension/sphere.c') diff --git a/libdimension/sphere.c b/libdimension/sphere.c index 490074b..7ff2292 100644 --- a/libdimension/sphere.c +++ b/libdimension/sphere.c @@ -47,11 +47,9 @@ dmnsn_new_sphere() /* Returns the closest intersection of `line' with `sphere' */ static bool -dmnsn_sphere_intersection_fn(const dmnsn_object *sphere, dmnsn_line line, +dmnsn_sphere_intersection_fn(const dmnsn_object *sphere, dmnsn_line l, dmnsn_intersection *intersection) { - dmnsn_line l = dmnsn_transform_line(sphere->trans_inv, line); - /* Solve (x0 + nx*t)^2 + (y0 + ny*t)^2 + (z0 + nz*t)^2 == 1 */ double poly[3], x[2]; poly[2] = dmnsn_vector_dot(l.n, l.n); @@ -66,10 +64,9 @@ dmnsn_sphere_intersection_fn(const dmnsn_object *sphere, dmnsn_line line, if (n == 2) t = dmnsn_min(t, x[1]); - intersection->ray = line; + intersection->ray = l; intersection->t = t; - intersection->normal = dmnsn_transform_normal(sphere->trans, - dmnsn_line_point(l, t)); + intersection->normal = dmnsn_line_point(l, t); intersection->texture = sphere->texture; intersection->interior = sphere->interior; return true; @@ -80,6 +77,5 @@ dmnsn_sphere_intersection_fn(const dmnsn_object *sphere, dmnsn_line line, static bool dmnsn_sphere_inside_fn(const dmnsn_object *sphere, dmnsn_vector point) { - point = dmnsn_transform_vector(sphere->trans_inv, point); return point.x*point.x + point.y*point.y + point.z*point.z < 1.0; } -- cgit v1.2.3