public void BuildTree(ref Vector3 bvhAabbMin, ref Vector3 bvhAabbMax) { m_optimizedAabbTree = new QuantizedBvh(); m_optimizedAabbTree.SetQuantizationValues(ref bvhAabbMin, ref bvhAabbMax); IList<QuantizedBvhNode> nodes = m_optimizedAabbTree.GetLeafNodeArray(); for (int i = 0; i < m_sapBroadphases.Count; i++) { QuantizedBvhNode node = new QuantizedBvhNode(); Vector3 aabbMin = Vector3.Zero, aabbMax = Vector3.Zero; m_sapBroadphases[i].GetBroadphaseAabb(ref aabbMin, ref aabbMax); m_optimizedAabbTree.Quantize(ref node.m_quantizedAabbMin, ref aabbMin, false); m_optimizedAabbTree.Quantize(ref node.m_quantizedAabbMax, ref aabbMax, true); int partId = 0; node.m_escapeIndexOrTriangleIndex = (partId << (31 - QuantizedBvh.MAX_NUM_PARTS_IN_BITS)) | i; nodes.Add(node); } m_optimizedAabbTree.BuildInternal(); }
QuantizedBvh m_optimizedTree; // for quantization public QuantizedNodeTriangleCallback(ObjectArray<QuantizedBvhNode> triangleNodes, QuantizedBvh tree) { m_triangleNodes = triangleNodes; m_optimizedTree = tree; }