Ejemplo n.º 1
0
            public bool Hit(Ray ray, float min_distance, float max_distance, ref HitData hit_data)
            {
                if (!bounding_box.Hit(ray, min_distance, max_distance))
                {
                    return(false);
                }

                HitData left_hit_data  = new HitData();
                HitData right_hit_data = new HitData();

                bool left_hit  = left_node.Hit(ray, min_distance, max_distance, ref left_hit_data);
                bool right_hit = right_node.Hit(ray, min_distance, max_distance, ref right_hit_data);

                if (left_hit && right_hit)
                {
                    hit_data = left_hit_data.Distance < right_hit_data.Distance ? left_hit_data : right_hit_data;
                    return(true);
                }

                if (left_hit)
                {
                    hit_data = left_hit_data;
                    return(true);
                }

                if (right_hit)
                {
                    hit_data = right_hit_data;
                    return(true);
                }

                return(false);
            }