コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: OCTreeBuilder.cs プロジェクト: KroneckerX/WCell
 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;
 }