// Creates a grid of cubes.
void PopulateCubeFieldScene(Scene* scene, Fill* fill,
                            int cubeCountX, int cubeCountY, int cubeCountZ, Vector3f offset,
                            float cubeSpacing = 0.5f, float cubeSize = 0.1f)
{

    Vector3f corner(-(((cubeCountX-1) * cubeSpacing) + cubeSize) * 0.5f,
                    -(((cubeCountY-1) * cubeSpacing) + cubeSize) * 0.5f,
                    -(((cubeCountZ-1) * cubeSpacing) + cubeSize) * 0.5f);
    corner += offset;

    Vector3f pos = corner;

    for (int i = 0; i < cubeCountX; i++)
    {
        // Create a new model for each 'plane' of cubes so we don't exceed
        // the vert size limit.
        Ptr<Model> model = *new Model();
        scene->World.Add(model);

        if (fill)
            model->Fill = fill;

        for (int j = 0; j < cubeCountY; j++)
        {
            for (int k = 0; k < cubeCountZ; k++)
            {
                model->AddBox(0xFFFFFFFF, pos, Vector3f(cubeSize, cubeSize, cubeSize));
                pos.z += cubeSpacing;
            }

            pos.z = corner.z;
            pos.y += cubeSpacing;
        }

        pos.y = corner.y;
        pos.x += cubeSpacing;
    }
}