netlib.narod.ru< Назад | Оглавление | Далее >

Рисование ландшафта

Чтобы нарисовать ландшафт, вам сначала надо вызвать метод SetEffectMaterial, выполняющий конфигурирование эффекта ландшафта. Затем вы устанавливаете буфер вершин ландшафта, буфер индексов и объявление вершин для графического устройства. Вы используете объявление вершин чтобы информировать графическое устройство об используемом формате вершин, после чего оно сможет корректно обрабатывать вершины:

// Установка буферов вершин и индексов сетки
GraphicsDevice.Vertices[0].SetSource(vb, 0,
          VertexPositionNormalTangentBinormal.SizeInBytes);
GraphicsDevice.Indices = ib;

// Установка объявления вершин
GraphicsDevice.VertexDeclaration = new VertexDeclaration(GraphicsDevice,
          VertexPositionNormalTangentBinormal.VertexElements);

На следующем этапе вы начинаете эффект и выполняете все проходы эффекта, рисуя ландшафт на каждом проходе. Чтобы нарисовать сетку ландшафта вы используете метод DrawIndexedPrimitives объекта XNA GraphicsDevice. Вы используете именно этот метод потому что рисуете примитивы, использующие индексы. Ниже приведен полный код метода Draw класса Terrain:

public override void Draw(GameTime time)
{
    // Конфигурирование TerrainEffect
    SetEffectMaterial();

    // Установка буфера вершин и индексов сетки 
    GraphicsDevice.Vertices[0].SetSource(vb, 0,
           VertexPositionNormalTangentBinormal.SizeInBytes);
    GraphicsDevice.Indices = ib;

    // Установка объявления вершин
    GraphicsDevice.VertexDeclaration = new VertexDeclaration(GraphicsDevice,
           VertexPositionNormalTangentBinormal.VertexElements);

    effect.Begin();

    // Перебор всех проходов эффекта
    foreach (EffectPass pass in effect.CurrentTechniquePasses)
    {
        pass.Begin();

        // Рисование сетки
        GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList,
               0, 0, numVertices, 0, numTriangles);

        pass.End();
    }

    effect.End();
}

На рис. 10.10 показан итоговый результат визуализации ландшафта. Обратите внимание, что поверхность ландшафта плоская. Однако, используемая карта нормалей добавляет детали камней к поверхности.


Рис. 10.10. Итоговый результат визуализации ландшафта

Рис. 10.10. Итоговый результат визуализации ландшафта



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz