private void addTestData() { var points = new Vector3[] { tree.bounds.max - Vector3.one * .3f, tree.bounds.min + Vector3.one * .3f, tree.bounds.center - Vector3.one * .3f, tree.bounds.center + new Vector3(1, -1, 1) * .3f, tree.bounds.min + Vector3.Scale(tree.bounds.max, Vector3.right) + Vector3.one * .3f, }; foreach (var point in points) { tree.Set(point, point); } transform.DestroyAllChildrenImmediate(); foreach (var node in tree.GetAllNonNullBoundsNodes()) { if (node.node.isLeaf) { var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.SetParent(transform); cube.transform.localPosition = node.bounds.center; cube.transform.localScale = node.bounds.size; } } //foreach (var b in tree.GetAllNonNullBoundsNodes()) //{ // Gizmos.color = b.node.isLeaf ? Color.white : new Color(.2f, .1f, .7f);// prettyBoundsEncoding(b.bounds); // Gizmos.DrawWireCube(b.bounds.center, b.bounds.size * (b.node.isLeaf ? .88f : 1f)); //} }
//CONSIDER: we will want to define this class's relationship to Chunk at some point public void Init(IntVector3 chunkPos, uint[] voxels) { int depth = vGenConfig.hilbertBits; Vector3 center = vGenConfig.ChunkPosToPos(chunkPos) + vGenConfig.ChunkSize / 2f; var bounds = new Bounds(center, vGenConfig.ChunkSize); tree = new VoxelOctree <uint>(depth, bounds); foreach (uint vox in voxels) { IntVector3 pos = IntVector3.FromUint256(vox); tree.Set(vox, pos.ToVector3()); } // instantiate or just set up raycast display rayDisplay = Instantiate(raycastDisplayPrefab); rayDisplay.transform.SetParent(transform); rayDisplay.transform.localPosition = vGenConfig.ChunkPosToPos(chunkPos); //ComputeBuffer b = BufferUtil.CreateWith(voxels); rayDisplay.initialize(null); //ResetBufferData(voxels); //test StartCoroutine(Scan()); //want }