public byte[] GetData() { var bytes = new byte[Data.Size]; for (int i = 0; i < Data.Size; i++) { bytes[i] = Data.GetArrayData().Elements[i].data; } return(bytes); }
// Recursively builds the BVH tree from the compressed packed array private BVHNode buildTree(Vector3 parentBBMin, Vector3 parentBBMax, uint nodeIndex) { BVHNode node = new BVHNode(); StaticAABBNode cnode = CompressedTree.GetArrayData().Elements[(int)nodeIndex]; node.Min = cnode.DecompressMin(parentBBMin, parentBBMax); node.Max = cnode.DecompressMax(parentBBMin, parentBBMax); if ((cnode.IDX0 & 0x80) > 0) { node.Left = buildTree(node.Min, node.Max, nodeIndex + 1); node.Right = buildTree(node.Min, node.Max, nodeIndex + ((((uint)cnode.IDX0 & 0x7F) << 8) | (uint)cnode.IDX1) * 2); } else { node.IsTerminal = true; node.Index = (((uint)cnode.IDX0 & 0x7F) << 8) | (uint)cnode.IDX1; } return(node); }
// Recursively builds the BVH tree from the compressed packed array private BVHNode buildBVHTree(Vector3 parentBBMin, Vector3 parentBBMax, uint nodeIndex) { BVHNode node = new BVHNode(); CompressedChunkBVHNode cnode = CompressedBVH.GetArrayData().Elements[(int)nodeIndex]; node.Min = cnode.DecompressMin(parentBBMin, parentBBMax); node.Max = cnode.DecompressMax(parentBBMin, parentBBMax); if ((cnode.IDX & 0x01) > 0) { node.Left = buildBVHTree(node.Min, node.Max, nodeIndex + 1); node.Right = buildBVHTree(node.Min, node.Max, nodeIndex + ((uint)cnode.IDX & 0xFE)); } else { node.IsTerminal = true; node.Index = (uint)cnode.IDX / 2; } return(node); }