Опубликован: 28.04.2009 | Доступ: свободный | Студентов: 1838 / 107 | Оценка: 4.36 / 4.40 | Длительность: 16:40:00
Специальности: Программист
Лекция 1:

Введение в XNA Framework

Лекция 1: 123456789 || Лекция 2 >
Уровни XNA Framework

Рис. 1.2. Уровни XNA Framework
Таблица 1.3. Таблица 1.3. Пространства имен сборки Microsoft.Xna.Framework.dll
Пространство имен Соответствующий компонент XNA Назначение
Microsoft.Xna.Framework Math Математические расчеты: матричная алгебра, аналитическая геометрия, проверка столкновений и т.д. В Managed DirectX эта функциональность (в урезанном виде) реализовывалась посредством библиотеки D3DX, являющейся частью DirectX. XNA Framework выполняет математические расчеты собственными средствами, что в некоторых случаях несколько повышает производительность благодаря отсутствию накладных расходов взаимодействия с COM.
Microsoft.Xna.Framework.Graphics Работа с графикой
Microsoft.Xna.Framework.Graphics.PackedVector Graphics Работа с упакованными векторами. Примером упакованного вектора является 32-х битное число, содержащее информацию о яркости красной, синей и зеленой компонентах цвета
Microsoft.Xna.Framework.Audio Audio Работа со звуком
Microsoft.Xna.Framework.Input Input Работа с устройствами ввода (клавиатура, мышь, джойстики).
Microsoft.Xna.Framework.Storage Storage Работа с файловой системой текущей платформы: загрузка и сохранение настроек приложения, "сохраненных игр" ( Save Games ) и т.д.

Ничего страшного, если у вас на первых порах будет рябить в глазах от обилия компонентов. По мере изучения XNA Framework всe встанет на свои места. В первой лекции мы познакомимся с некоторыми классами пространства имен Microsoft.Xna.Framework.Graphics, и научимся использовать их для визуализации относительно простых двухмерных изображений.

1.1. Создание простейшего приложения, использующего XNA Framework.
 Наше первое приложение(Ex01), использующее XNA. Graphic User Interface – графический пользовательский интерфейс

Рис. 1.3. Наше первое приложение(Ex01), использующее XNA. Graphic User Interface – графический пользовательский интерфейс

Как известно, лучший способ получить представление о новой технологии – написать с еe помощью простейшее приложение. Так мы и поступим. Наше первое приложение, использующее XNA Framework, будет просто закрашивать форму синим цветом (рисунок 1.3). Для создания GUI5Graphic User Interface – графический пользовательский интерфейс -интерфейса мы воспользуемся библиотекой Windows Forms, являющуюся стандартом для платформы .NET.

Для начала запустите Microsoft Visual Studio 2005 и создайте новый проект GUI –приложения для платформы Windows (File | New | Project...). В раскрывшемся окне выберите Visual C# | Windows | Windows Application, введите название приложения, снимите флажок Create directory for Solution и нажмите Ok. Переименуйте файл формы из Form1.cs в MainForm.cs.

Следующий шаг – подключение сборки Microsoft.Xna.Framework.dll, содержащий компоненты слоя Core Framework, включая необходимый нам компонент Graphics.Для подключения сборки щeлкните правой кнопкой мыши на узле Reference в окне Solution Explorer и выберите в контекстном меню пункт Add Reference... (рисунок 1.4). В открывшемся окне выберете сборку Microsoft.Xna.Framework и нажмите кнопку Ok (рисунок 1.5).

Вкладка Solution Explorer

Рис. 1.4. Вкладка Solution Explorer
Окно Add Reference

Рис. 1.5. Окно Add Reference

Теперь мы можем приступать к собственно написанию программы. Откройте окно редактирования исходного кода, щелкнув правой кнопкой мыши по форме и выбрав пункт View Code контекстного меню (либо нажав на кнопке View Code в верхней части окна Solution Explorer ). Так как мы будем активно использовать классы из пространства имен Microsoft.Xna.Framework.Graphics, было бы логично добавить в начало программы следующую строку:

using Microsoft.Xna.Framework.Graphics;

В XNA Framework все низкоуровневые графические операции выполняются с использованием класса GraphicsDevice, инкапсулирующим графическое устройство (трeхмерный ускоритель). Конструктор класса GraphicsDevice объявлен следующим образом:

public GraphicsDevice(GraphicsAdapter adapter, DeviceType deviceType, 
IntPtr renderWindowHandle, CreateOptions creationOptions, params PresentationParameters[] 
presentationParameters);

где

  • adapter - экземпляр класса GraphicsAdapter, соответствующей используемой видеокарте (многие современные компьютеры содержат две и более видеокарты). Для указания видеокарты по умолчанию достаточно передать в качестве данного параметра значение статического свойства GraphicsAdapter.DefaultAdapter.
  • deviceType - тип устройства, задаваемый с использованием перечислимого типа DeviceType (таблица 1.4). На практике обычно используется значение DeviceType .Hardware.
  • renderWindowHandle - дескриптор окна или элемента управления, который будет использоваться для вывода информации.
  • creationOptions - набор битовых флагов перечислимого типа CreateOptions, задающих режим работы устройства (таблица 1.5). В нашем случае мы будем использовать режимы CreateOptions.SoftwareVertexProcessing и CreateOptions.SingleThreaded.
  • PresentationParameters - набор структур PresentationParameters, описывающих представление данных на экране монитора. Каждому монитору соответствует своя структура PresentationParameters. Так как наши приложение будет осуществлять вывод только на один монитор, мы ограничимся одной структурой PresentationParameters. В таблице 1.6 приведено описание некоторых свойств структуры PresentationParameters.

Если попытка создания устройства заканчивается неудачей, конструктор генерирует исключение. Подобная ситуация возникает, к примеру, при попытке создания устройства с использованием флага CreateOptions.HardwareVertexProcessing на видеокарте, не имеющей аппаратных вершинных процессоров. Примерами таких видеокарт являются Intel GMA 900 и Intel GMA950, интегрированные в чипсеты i915G и i945G соответственно. Так как флаг HardwareVertexProcessing влияют исключительно на выполнение вершинных шейдеров, в то время как примеры этой лекции не используют эту функциональность, применение данного флага некоим образом не повлияет на производительность наших приложений и лишь неоправданно увеличит требования к видеокарте. Поэтому в примерах первой лекции курса мы ограничимся использованием лишь флага SoftwareVertexProcessing.

Таблица 1.4. Таблица 1.4. Значения перечислимого типа DeviceType
Значение Описание
Hardware Аппаратное устройство
Reference Устройство эмулируется средствами DirectX SDK. Обычно используется для эмуляции функциональности, не поддерживаемой текущей видеокартой (например, эмуляция пиксельных шейдеров6Основы вершинные и пиксельных шейдеров будут рассмотрены в лекции 2.3 на GeForce2). Правда, такую эмуляцию реально использовать лишь в отладочных целях, так как производительность приложений в этом режиме редко превышает один кадр в секунду.
NullReference Нуль-устройство, игнорирующее все поступающие команды (наподобие устройства NUL в MS-DOS и Windows ). Может использоваться для оценки производительности приложения на бесконечно быстрой видеокарте.
Таблица 1.5. Значения перечислимого типа CreateFlags
Значение Описание
HardwareVertexProcessing Аппаратная обработка вершин средствами GPU7Graphic Processor Unit – графический процессор, установленный на видеокарте
SoftwareVertexProcessing Программная обработка вершин средствами CPU
MixedVertexProcessing Смешанная обработка вершин. Позволяет приложению самостоятельно переключаться между программной и аппаратной обработкой вершин. Полезна, к примеру, при использовании вершинных шейдеров версии 2.0 на GeForce3, который аппаратно поддерживает только вершинные шейдеры версии 1.1. В этом случае вершинные шейдеры версии 1.1 можно выполнять аппаратно, а версии 2.0 – в режиме программной эмуляции
NoWindowChanges Устройство не будет автоматически восстанавливаться после потери фокуса окном и т.д. Все эти действия ложатся на плечи программиста. Данное значение применяется очень редко
SingleThreaded Увеличивает производительность за счет отключения критических секций, позволяющих одновременно обращаться к устройству из нескольких потоков. Рекомендуется всегда по возможности использовать этот флаг.
SinglePrecision Переключает математический сопроцессор в режим пониженной точности. Все вычисления с плавающей точкой, включая использующие тип double, будут выполнять с точностью 7 знаков. Более подробная информация об этом режиме приведена во врезке
Таблица 1.6. Некоторые свойства структуры PresentationParameters
Поле Описание
bool IsFullScreen При выводе на поверхность компонента или формы этому свойству необходимо присвоить значение false. Если же приложение является полноэкранным, то используется значение true
int BackBufferCount Задает количество вспомогательных буферов, используемых для борьбы с эффектом мерцания при смене кадров. При использовании одного вторичного буфера изображение сначала рисуется во вспомогательном буфере, после чего уже готовое изображение копируется в экранный буфер. Этот процесс называется двойной буферизацией. Буферизация, использующая два вспомогательных буфера, называется тройной. Более подробно различные типы буферизации будут рассмотрены в соответствующих разделах курса. А пока мы будем использовать двойную буферизацию, присваивая полю BackBufferCount значение 1.
int BackBufferWidth Ширина вспомогательных буферов в пикселях. Если этот параметр равен 0, то конструктор метода Device рассчитывает его автоматически, полагая равным ширине клиентской области окна8Часть окна, используемая приложением для вывода информации. В клиентскую область окна не входят заголовок окна, рамки по краям окна и т.д
int BackBufferHeight Высота вспомогательных буферов в пикселях. Если этот параметр равен 0, то конструктор метода Device рассчитывает его автоматически, полагая равным высоте клиентской области окна
Direct3D.SwapEffect SwapEffect Указывает, каким образом осуществляется переключение буферов при двойной и тройной буферизации. Подавляющее большинство программ присваивают этому полю значение SwapEffect.Discard – в этом случае видеокарта сама выбирает режим переключения буфера, наиболее подходящий в конкретной ситуации.
Лекция 1: 123456789 || Лекция 2 >
Андрей Леонов
Андрей Леонов

Reference = add reference, в висуал студия 2010 не могу найти в вкладке Solution Explorer, Microsoft.Xna.Framework. Его нету.