public void RenderUpdate() { if (renderUpToDate || blocks == null) { return; } ChunkRenderHandle renderHandle = new ChunkRenderHandle(this); for (int i = 0; i < chunkSizeX; ++i) { for (int j = 0; j < chunkSizeY; ++j) { for (int k = 0; k < chunkSizeZ; ++k) { if (blocks[i, j, k] != null) { blocks[i, j, k].RenderAt(renderHandle, this.GetBlockCenterPosition(i, j, k), BlockVisibleStatus.AllVisible); } } } } renderHandle.Apply(); renderUpToDate = true; }
public override void RenderAt(ChunkRenderHandle handle, Vector3 position, BlockComponent component, BlockVisibleStatus visibleStatus) { if (!visibleStatus.Visible()) { return; } // TODO // 未验证的问题:为什么改为 Vector(1, 0, 0)会出BUG Vector3 baseDirc = new Vector3(0, 0, 1); foreach (var side in Block.sides) { if (visibleStatus.FaceVisible(side.Key)) { BuildMeshFace( handle.meshList, position, Quaternion.FromToRotation(baseDirc, side.Value), uvs[side.Key]); } } }
abstract public void RenderAt(ChunkRenderHandle handle, Vector3 position, BlockComponent component, BlockVisibleStatus visibleStatus);
public void RenderAt(ChunkRenderHandle handle, Vector3 position, BlockVisibleStatus visibleStatus) { protoType.RenderAt(handle, position, component, visibleStatus); }