Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

Последний блок кода метода DrawModel() задействует механизм языка программирования С# и оператор foreach для цикличного перебора данных массива или, как в нашем случае, коллекции данных. Оператор foreach позаимствован из языка программирования Visual Basic и позволяет циклично извлекать каждый элемент коллекции данных по очереди, помещая извлеченный элемент в очередной объект массива, который вынесен в заголовок этого оператора.

foreach (ModelMesh mesh in m.Meshes)

В результате этот механизм позволяет получить все компоненты мэша, объединить их воедино и сформировать трехмерную модель. Следующая строка кода

foreach (BasicEffect effect in mesh.Effects)

делает ту же самую операцию по извлечению коллекции данных, но уже в отношении шейдерных данных, а точнее вершинного потока, поступающего во входные данные видеоадаптера.

В данном контексте используется простой эффект BasicEffect, который дает возможность работать с шейдерами в автоматическом режиме. В этом случае система сама рассчитывает освещение, материал, нормали, трансформацию и другие виды преобразований в автоматическом режиме. Работать с шейдерами очень сложно, и освещение этой темы выходит за рамки книги, поэтому в программе применяется более простой в использовании класс BasicEffect.

Далее сам метод DrawModel() мы вызываем в методе, отвечающем за рисование графики на экране монитора.

case CurentGameState.GameScreen: {

graphics.GraphicsDevice.RenderState.DepthBufferEnable = true;

DrawModel(model);

break;

}

Здесь, думается, все понятно, за исключением самой верхней строки кода этого блока.

graphics.GraphicsDevice.RenderState.DepthBufferEnable = true;

На самом деле запись этой строки кода сейчас не имеет какой-либо смысловой нагрузки. Эта запись нам понадобится в следующих главах, когда мы добавим на экран вывод спрайтовых изображений.

Дело в том, что использование в программе объектов класса SpriteBatch несколько изменяет настройки видеоадаптера, перестраивая эти настройки под работу с двухмерной графикой. Поэтому очень важно возвращать некоторые настройки назад. В данном случае необходимо вновь включить буфер глубины, который SpriteBatch отключил для работы с двухмерной графикой. В противном случае ваша модель на экране будет представлена с большими визуальными дефектами. Кстати, может понадобиться и больше дополнительных настроек, для одновременной работы с моделями и двухмерной графикой.

Теперь обратитесь к полному исходному коду класса Gamel, который представлен в листинге 18.1. По обыкновению все новшества в коде выделены жирным шрифтом. В следующем разделе мы усовершенствуем работу программы и создадим отдельный класс для работы с трехмерными моделями.


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz