Beispiel #1
0
        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));
            //}
        }
Beispiel #2
0
        //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
        }