From 319491781c1389d82897075b6d890e74d82a08a9 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 9 Nov 2009 15:01:22 -0500 Subject: Calculate surface normals in intersection callbacks. --- libdimension/kD_splay_tree.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'libdimension/kD_splay_tree.c') diff --git a/libdimension/kD_splay_tree.c b/libdimension/kD_splay_tree.c index 5c6289d..77e57dd 100644 --- a/libdimension/kD_splay_tree.c +++ b/libdimension/kD_splay_tree.c @@ -304,10 +304,12 @@ dmnsn_kD_splay_search_recursive(dmnsn_kD_splay_node *node, dmnsn_line ray, dmnsn_intersection * dmnsn_kD_splay_search(dmnsn_kD_splay_tree *tree, dmnsn_line ray) { - dmnsn_kD_splay_search_result result; - result = dmnsn_kD_splay_search_recursive(tree->root, ray, -1.0); + dmnsn_kD_splay_search_result result + = dmnsn_kD_splay_search_recursive(tree->root, ray, -1.0); + if (result.node) dmnsn_kD_splay(tree, result.node); + return result.intersection; } @@ -353,6 +355,12 @@ dmnsn_kD_splay_search_recursive(dmnsn_kD_splay_node *node, dmnsn_line ray, result.node = node; result.intersection = result_temp.intersection; t = result.intersection->t; + + /* Transform the normal vector back to the observer's view */ + result.intersection->normal = dmnsn_matrix_vector_mul( + node->object->trans, + result.intersection->normal + ); } else { dmnsn_delete_intersection(result_temp.intersection); } -- cgit v1.2.3