void AddNormals() { Vector3 v0 = _vertices[_lastVertIndex + 0]; Vector3 v1 = _vertices[_lastVertIndex + 1]; Vector3 v2 = _vertices[_lastVertIndex + 2]; AddNormals(VoxelUtils.Normal(v0, v1, v2)); }
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); } }
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(); } }
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(); }
Vector3i LocalToGlobal(Vector3i chunkPosition, Vector3i blockPosition) { return(VoxelUtils.LocalToWorld(VoxelConsts.ChunkLength, chunkPosition, blockPosition)); }