Exemplo n.º 1
0
        public void Draw(Graphics.SceneRenderer renderer)
        {
            effect.View       = renderer.Camera.LookAtMatrix;
            effect.Projection = GameSettings.PfovMatrix;

            Chunk chunk;

            // Draw geometry
            for (int x = 0; x < width; ++x)
            {
                for (int z = 0; z < length; ++z)
                {
                    chunk = chunks[x, z];

                    // If necessary, rebuild the chunk's geometry.
                    if (chunk.IsDirty)
                    {
                        chunk.Rebuild(renderer);
                    }
                    else
                    {
                        // Else just rebuild transparent vertices to ensure correct draw order.
                        // TODO: Perform this only when the player moves, not every frame.
                        chunk.ReconstructVertices(renderer, true);
                    }

                    // If there are opaque vertices to draw, do so.
                    if (chunk.OpaqueVertexBuffer != null)
                    {
                        renderer.DrawVertices(chunk.OpaqueVertexBuffer, effect);
                    }

                    // Draw any alpha-blended vertices.
                    if (chunk.TransparentVertexBuffer != null)
                    {
                        renderer.DrawAlphaBlendedVertices(chunk.TransparentVertexBuffer, effect, new Vector3(x * Chunk.WIDTH, 0, z * Chunk.LENGTH));
                    }
                }
            }
        }