Exemple #1
0
        void AddNormals()
        {
            Vector3 v0 = _vertices[_lastVertIndex + 0];
            Vector3 v1 = _vertices[_lastVertIndex + 1];
            Vector3 v2 = _vertices[_lastVertIndex + 2];

            AddNormals(VoxelUtils.Normal(v0, v1, v2));
        }
Exemple #2
0
 public void AddCube(Vector3 position, int submeshId)
 {
     for (int i = 0; i < 6; i++)
     {
         Directions d = (Directions)i;
         VoxelUtils.Quad(d, out Vector3 v0, out Vector3 v1, out Vector3 v2, out Vector3 v3);
         Quad q = new Quad(v0, v1, v2, v3, 1, 1) + position;
         Add(q, submeshId);
     }
 }
Exemple #3
0
        void UpdateNeighborChunk(Vector3i chunkPosition, Vector3i blockPosition)
        {
            // set neighboring chunks dirty
            _neighbors.Clear();
            VoxelUtils.FindNeighbors(VoxelConsts.ChunkLength, blockPosition, _neighbors);
            foreach (Vector3i delta in _neighbors)
            {
                Vector3i neighborChunkPosition = chunkPosition + delta;

                // Do spawn the neighbor chunk if it doesn't exist
                // because their blocks must be visible if the set block is Empty.
                Chunk neighborChunk = GetOrAddChunk(neighborChunkPosition);

                neighborChunk.QueueUpdate();
            }
        }
Exemple #4
0
        public void Initiate(Vector3i chunkPosition)
        {
            Clear();

            _renderer.sharedMaterials = _source.BlockMaterials;
            _filter.sharedMesh        = new Mesh {
                indexFormat = IndexFormat.UInt32
            };

            _meshBuilder = new VoxelMeshBuilder(1024, VoxelConsts.BlockCount);
            _quadBuilder = new VoxelQuadBuilder(1024, VoxelConsts.ChunkLength, blockPosition =>
            {
                Vector3i p = VoxelUtils.LocalToWorld(VoxelConsts.ChunkLength, chunkPosition, blockPosition);
                return(_globalLookup.Lookup(p));
            });

            InitiateUpdaters();
        }
Exemple #5
0
 Vector3i LocalToGlobal(Vector3i chunkPosition, Vector3i blockPosition)
 {
     return(VoxelUtils.LocalToWorld(VoxelConsts.ChunkLength, chunkPosition, blockPosition));
 }