예제 #1
0
 internal void computeVolume(SSBVHNodeAdaptor <GO> nAda)
 {
     assignVolume(nAda.objectpos(gobjects[0]), nAda.radius(gobjects[0]));
     for (int i = 1; i < gobjects.Count; i++)
     {
         expandVolume(nAda, nAda.objectpos(gobjects[i]), nAda.radius(gobjects[i]));
     }
 }
예제 #2
0
        public void addObject(GO newOb)
        {
            SSAABB box    = SSAABB.FromSphere(nAda.objectpos(newOb), nAda.radius(newOb));
            float  boxSAH = ssBVHNode <GO> .SA(ref box);

            rootBVH.addObject(nAda, newOb, ref box, boxSAH);
        }
예제 #3
0
        internal static float SA(SSBVHNodeAdaptor <GO> nAda, GO obj)
        {
            float radius = nAda.radius(obj);

            float size = radius * 2;

            return(6.0f * (size * size));
        }
예제 #4
0
        internal static SSAABB AABBofOBJ(SSBVHNodeAdaptor <GO> nAda, GO obj)
        {
            float  radius = nAda.radius(obj);
            SSAABB box;

            box.Min.X = -radius; box.Max.X = radius;
            box.Min.Y = -radius; box.Max.Y = radius;
            box.Min.Z = -radius; box.Max.Z = radius;
            return(box);
        }
예제 #5
0
        internal float SAH(SSBVHNodeAdaptor <GO> nAda, GO obj)
        {
            float radius = nAda.radius(obj);

            return((float)(4.0 * Math.PI * radius * radius));  // bounding sphere surface area
        }