public OCTree Build(Vector3[] vertexArray, int[] indexArray) { var list = new List <OCTPoly>(); for (var i = 0; i < (indexArray.Length / 3); i++) { var a = vertexArray[indexArray[i * 3]]; var b = vertexArray[indexArray[(i * 3) + 1]]; var c = vertexArray[indexArray[(i * 3) + 2]]; list.Add(new OCTPoly(a, b, c)); } var polyList = list.ToArray(); var box = CalculateBounds(polyList); var center = ((box.Max + box.Min) * 0.5f); var extents = box.Max - center; if (MakeSquare) { var x = extents.X; if (extents.Y > x) { x = extents.Y; } if (extents.Z > x) { x = extents.Z; } extents.X = extents.Y = extents.Z = x; } extents += (extents * ExpandBoundsFactor); box.Min = center - extents; box.Max = center + extents; var node = new IntermediateOCTreeNode { Bounds = box }; RecursiveBuild(node, polyList, center, extents, 0); var tree = new OCTree { Root = node.Build(WeldDelta) }; return(tree); }
public OCTree Build(Vector3[] vertexArray, int[] indexArray) { var list = new List<OCTPoly>(); for (var i = 0; i < (indexArray.Length / 3); i++) { var a = vertexArray[indexArray[i * 3]]; var b = vertexArray[indexArray[(i * 3) + 1]]; var c = vertexArray[indexArray[(i * 3) + 2]]; list.Add(new OCTPoly(a, b, c)); } var polyList = list.ToArray(); var box = CalculateBounds(polyList); var center = ((box.Max + box.Min) * 0.5f); var extents = box.Max - center; if (MakeSquare) { var x = extents.X; if (extents.Y > x) { x = extents.Y; } if (extents.Z > x) { x = extents.Z; } extents.X = extents.Y = extents.Z = x; } extents += (extents * ExpandBoundsFactor); box.Min = center - extents; box.Max = center + extents; var node = new IntermediateOCTreeNode { Bounds = box }; RecursiveBuild(node, polyList, center, extents, 0); var tree = new OCTree { Root = node.Build(WeldDelta) }; return tree; }