diff options
author | Tavian Barnes <tavianator@gmail.com> | 2009-11-09 15:01:22 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@gmail.com> | 2009-11-09 15:01:22 -0500 |
commit | 319491781c1389d82897075b6d890e74d82a08a9 (patch) | |
tree | 048b36a0fc9451db499f4f6c1d828814130a67fa /libdimension/kD_splay_tree.c | |
parent | 1044badd2e625c73eae616f6a0d10479dde54db5 (diff) | |
download | dimension-319491781c1389d82897075b6d890e74d82a08a9.tar.xz |
Calculate surface normals in intersection callbacks.
Diffstat (limited to 'libdimension/kD_splay_tree.c')
-rw-r--r-- | libdimension/kD_splay_tree.c | 12 |
1 files changed, 10 insertions, 2 deletions
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); } |