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])); } }
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); }
internal static float SA(SSBVHNodeAdaptor <GO> nAda, GO obj) { float radius = nAda.radius(obj); float size = radius * 2; return(6.0f * (size * size)); }
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); }
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 }