1 #include "renderer_detail_trace.h"
22 ( position[ 0 ] >= 0 ) && ( position[ 0 ] <= 1 ) &&
23 ( position[ 1 ] >= 0 ) && ( position[ 1 ] <= 1 ) &&
24 ( position[ 2 ] >= 0 ) && ( position[ 2 ] <= 1 )
31 if ( position[ 0 ] < 0 ) {
35 double const lambda = -position[ 0 ] / ray[ 0 ];
36 Vector< double, 3 > projected = { { 0, position[ 1 ] + lambda * ray[ 1 ], position[ 2 ] + lambda * ray[ 2 ] } };
38 ( projected[ 1 ] >= 0 ) && ( projected[ 1 ] <= 1 ) &&
39 ( projected[ 2 ] >= 0 ) && ( projected[ 2 ] <= 1 )
47 else if ( position[ 0 ] > 1 ) {
51 double const lambda = ( 1 - position[ 0 ] ) / ray[ 0 ];
52 Vector< double, 3 > projected = { { 1, position[ 1 ] + lambda * ray[ 1 ], position[ 2 ] + lambda * ray[ 2 ] } };
54 ( projected[ 1 ] >= 0 ) && ( projected[ 1 ] <= 1 ) &&
55 ( projected[ 2 ] >= 0 ) && ( projected[ 2 ] <= 1 )
64 if ( position[ 1 ] < 0 ) {
68 double const lambda = -position[ 1 ] / ray[ 1 ];
69 Vector< double, 3 > projected = { { position[ 0 ] + lambda * ray[ 0 ], 0, position[ 2 ] + lambda * ray[ 2 ] } };
71 ( projected[ 0 ] >= 0 ) && ( projected[ 0 ] <= 1 ) &&
72 ( projected[ 2 ] >= 0 ) && ( projected[ 2 ] <= 1 )
80 else if ( position[ 1 ] > 1 ) {
84 double const lambda = ( 1 - position[ 1 ] ) / ray[ 1 ];
85 Vector< double, 3 > projected = { { position[ 0 ] + lambda * ray[ 0 ], 1, position[ 2 ] + lambda * ray[ 2 ] } };
87 ( projected[ 0 ] >= 0 ) && ( projected[ 0 ] <= 1 ) &&
88 ( projected[ 2 ] >= 0 ) && ( projected[ 2 ] <= 1 )
97 if ( position[ 2 ] < 0 ) {
101 double const lambda = -position[ 2 ] / ray[ 2 ];
102 Vector< double, 3 > projected = { { position[ 0 ] + lambda * ray[ 0 ], position[ 1 ] + lambda * ray[ 1 ], 0 } };
104 ( projected[ 0 ] >= 0 ) && ( projected[ 0 ] <= 1 ) &&
105 ( projected[ 1 ] >= 0 ) && ( projected[ 1 ] <= 1 )
108 position = projected;
113 else if ( position[ 2 ] > 1 ) {
115 if ( ray[ 2 ] < 0 ) {
117 double const lambda = ( 1 - position[ 2 ] ) / ray[ 2 ];
118 Vector< double, 3 > projected = { { position[ 0 ] + lambda * ray[ 0 ], position[ 1 ] + lambda * ray[ 1 ], 1 } };
120 ( projected[ 0 ] >= 0 ) && ( projected[ 0 ] <= 1 ) &&
121 ( projected[ 1 ] >= 0 ) && ( projected[ 1 ] <= 1 )
124 position = projected;
131 return std::numeric_limits< double >::infinity();