Esempio n. 1
0
        protected Triangle DoesIntersectAnyInnerTriangles(Ray ray)
        {
            if (InnerTriangles == null || !InnerTriangles.Any())
            {
                return(null);
            }

            float    currZ = 0;
            Triangle res   = null;

            foreach (var triangle in InnerTriangles)
            {
                if (Renderer.IntersectionRayTriangle(ray, triangle, out float u, out float v))
                {
                    if (res == null)
                    {
                        res   = triangle;
                        currZ = (triangle.a.Z + triangle.b.Z + triangle.c.Z) / 3;
                    }
                    else
                    {
                        float z = (triangle.a.Z + triangle.b.Z + triangle.c.Z) / 3;
                        if (z < currZ)
                        {
                            res   = triangle;
                            currZ = z;
                        }
                    }
                }
            }

            return(res);
        }
Esempio n. 2
0
        protected bool DoesIntersectAnyInnerTriangles(Ray ray)
        {
            if (InnerTriangles == null || !InnerTriangles.Any())
            {
                return(false);
            }

            foreach (var Triangle in InnerTriangles)
            {
                if (Renderer.IntersectionRayTriangle(ray, Triangle))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 3
0
 public void SpreadTriangles()
 {
     for (int i = 0; i < 8; i++)
     {
         var child             = ChildNodes[i];
         var resTriangleangles = InnerTriangles.GetRange(0, InnerTriangles.Count);
         foreach (var Triangle in InnerTriangles)
         {
             if (child.IsTriangleInside(Triangle))
             {
                 child.InnerTriangles.Add(Triangle);
                 resTriangleangles.Remove(Triangle);
             }
         }
         InnerTriangles = resTriangleangles;
         ChildNodes[i]  = child;
     }
 }