netlib.narod.ru | < Назад | Оглавление | Далее > |
Если вы думали, что определение и эксперименты с камерой и освещением являются уделом сложных игр, вам придется поменять мнение. XNA упрощает работу с камерой, освещением и «специальными эффектами», но вы должны иметь базовое представление о них, чтобы создать даже простую трехмерную игру. Да и вообще, как без камеры и освещения вы увидите, что сконструировано в вашей трехмерной сцене?
В этом разделе вы получите только высокоуровневый обзор данных возможностей, который лишь предоставит вам возможность продвинуться дальше в следующей главе и создать простую игру. Просто помните, что вы можете делать много захватывающих вещей с освещением, эффектами и перемещением камеры, так что можете углубиться в эти темы, когда разберетесь с основами.
Класс XNA BasicEffect выполнит все, что вам потребуется не только в простейших играх, но и в более сложных проектах. Он предоставляет свойства и методы, которые позволят вам определить финальные детали визуализации вашей трехмерной сцены. Вот некоторые из наиболее важных свойств этого класса:
View: матрица вида, определяющая местоположение и направление камеры. Обычно создается с помощью Matrix.CreateLookAt.
Projection: матрица проекции, используемая для отображения координат трехмерной сцены на экранные координаты. Обычно создается с помощью Matrix.CreatePerspective, Matrix.CreateOrtographics или подобных методов.
World: мировая матрица (world matrix), используемая для применения преобразований ко всем объектам трехмерной сцены.
LightingEnabled: если False, сцена визуализируется с использованием базового освещения, которое равномерно подсвечивает все стороны всех объектов. Если True, для освещения сцены будут использованы свойства освещения BasicEffect.
EnableDefaultLighting: этот метод включает единственный, белый источник направленного света, не требующий никакого дополнительного конфигурирования освещения.
AmbientLightColor: определяет цвет фонового света (ambient light), который равномерно освещает все стороны всех объектов. Используется при визуализации только если LightingEnable равно True.
DirectionalLight0, DirectionalLight1 и DirectionalLight2: определяют до трех источников направленного света, используемых эффектом при визуализации. Каждый источник направленного света определяется своим отражаемым цветом (цвет света, образующего зеркальные блики на поверхности), рассеиваемым цветом (цвет рассеянно отражаемого света) и направлением света. Свойства используются только если LightingEnabled равно True.
FogColor, FogStart и FogEnd: позволяет определить «туман» для сцены, чтобы объекты, находящиеся в области тумана, выглядели как будто вы смотрите на них через плотный дым. Вы можете задать цвет тумана, а также расстояние, на котором туман начинается и заканчивается.
Помимо этих свойств, BasicEffect предоставляет функциональность, позволяющую вам визуализировать трехмерную сцену требуемым образом. Приведенный ниже фрагмент кода показывает набросок, показывающий, что ваша программа должна сделать, чтобы визуализировать сцену должным образом, подразумевая, что effect — это правильно инициализированный объект BasicEffect:
effect.Begin(); foreach(EffectPass CurrentPass in effect.CurrentTechnique.Passes) { CurrentPass.Begin(); // Здесь помещаем код для рисования сцены // с использованием данного эффекта CurrentPass.End(); } effect.End();
В этом коде метод Begin говорит эффекту начать обработку, а затем в цикле перебираются все EffectPass используемой в данный момент техники (есть также коллекция техник эффекта). Вам необходимо начинать и заканчивать каждый проход техники. И, в конце, надо сообщить эффекту о завершении обработки методом End.
На первый взгляд предыдущий код может показаться слишком большим для простой визуализации эффекта. Однако, вы должны помнить, что BasicEffect — это особый вариант класса Effect, мощного, гибкого и предоставляющего программисту все необходимое управление, которое может потребоваться для профессиональных техник эффектов, таких как использование самостоятельно сделанных шейдеров.
BasicEffect простой, но все равно остается вариантом Effect, и вы должны использовать показанный выше код в каждой создаваемой программе. Однако, вам не надо беспокоиться о том, какие типы техник может использовать программа, или какие проходы может содержать каждая из этих техник — вы просто будете использовать этот код как шаблон проекта, поскольку сейчас важно понять, какие удобства может обеспечить BasicEffect через свои свойства. Если вы хотите подробнее разобраться с эффектами, обратитесь к разделу «How to: Create and Apply Custom Effects» в справочной системе XNA Game Studio.
netlib.narod.ru | < Назад | Оглавление | Далее > |