
- •Содержание
- •Очистка буферов графического устройства
- •Избирательная очистка буферов
- •Устранение скрытых дефектов приложения
- •Общие сведения о примитивах
- •Введение в hlsl
- •Типы данных hlsl
- •Функции и семантики hlsl
- •Техники, проходы и профили hlsl
- •IncludeHandler – объект, используемый для обработки директив #include в fx-файле. Так как наш файл не содержит директив #include, мы будем использовать значение null
- •Визуализация объекта, использующего эффект
- •Запускающее приложение
В этой работе мы изучим совместное применение технологий Windows Forms и XNA для построения оконных приложений с обычным графическим интерфейсом GUI и трехмерным ускорителем видеокарты. В качестве упражнений мы построим приложения разного типа и познакомимся с тонкостями совместного применения указанных средств.
Содержание
Упражнение 1. Вывод графической информации XNA на стандартную форму
Создание заготовки приложения
Очистка буферов графического устройства
Избирательная очистка буферов
Устранение скрытых дефектов приложения
Потеря информации графическим устройством
Упражнение 2. Вывод графической информации XNA на пользовательский элемент управления
Создание заготовки пользовательского элемента управления
Общие сведения о примитивах
Введение в HLSL
Типы данных HLSL
Функции и семантики HLSL
Техники, проходы и профили HLSL
Добавление эффекта в приложение
Визуализация объекта, использующего эффект
Запускающее приложение
Все
необходимые для выполнения данной
работы программы можно найти в
прилагаемом
каталоге.
Работа выполнена на основе материалов С.А. Гайдукова, приведенных в источнике http://www.intuit.ru/department/se/intxna
Упражнение 1. Вывод графической информации XNA на стандартную форму
Создание заготовки приложения
Создайте новое решение и новый проект командойFile/New/Project, заполнив окно мастера так
увеличить изображение
Переименуйте файл формы Form1.cs в MainForm.cs
Выделите форму в конструкторе форм и в панели Properties в свойстве Text установите заголовок окна " Упражнение 1 "
Командой Project/Add Reference вызовите окно добавления ссылок и на вкладке .NET выберите библиотечную сборкуMicrosoft.Xna.Framework.dll версии 3.0
В этой библиотеке находится множество компонентов 3D -графики, размещенные в нескольких пространствах имен, в том числе в интересующем нас пространстве имен Microsoft.Xna.Framework.Graphics
Прежде всего воспользуемся классом GraphicsDevice, инкапсулирующим средства управления графическим устройством - видеокартой компьютера. Конструктор этого класса описывается так
public GraphicsDevice(Microsoft.Xna.Framework.Graphics.GraphicsAdapter adapter,
Microsoft.Xna.Framework.Graphics.DeviceType deviceType, System.IntPtr renderWindowHandle,
Microsoft.Xna.Framework.Graphics.PresentationParameters presentationParameters)
adapter - статическое свойство класса GraphicsAdapter, соответствующее выбранной для работы видеокарте. Современные компьютеры содержат несколько видеокарт, поэтому проще всего выбрать свойства GraphicsAdapter.DefaultAdapter
deviceType - тип устройства, задаваемый перечислением DeviceType, которое имеет значения
Hardware - реальное аппаратное устройство
Reference - реальное устройство эмулируется средствами DirectX SDK. Обычно используется для эмуляции функциональности, не поддерживаемой текущей видеокартой. Такую эмуляцию реально использовать лишь в отладочных целях, так как производительность приложений в этом режиме редко превышает один кадр в секунду
NullReference - игнорируются все поступающие команды и используется для оценки производительности приложения с имитацией бесконечно быстрой видеокарты
renderWindowHandle - дескриптор окна или элемента управления (например, Panel ), который будет использоваться для вывода графических изображений
presentationParameters - экземпляр класса PresentationParameters, свойства которого определяют настройки представления изображения на экране
Для создания и настройки графического устройства нужно объявить в классе MainForm поле, зарегистрировать для события Load формы обработчик, в котором создать экземпляр устройства и настроить его с помощью свойств соответствующих объектов.
Вызовите контекстное меню формы MainForm, щелкнув на ней правой кнопкой мыши, и выполните команду View Code
Подключите иснструкцией using к файлу MainForm.cs пространство имен Microsoft.Xna.Framework.Graphics
Объявите в классе MainForm поле типа GraphicsDevice с именем device
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Xna.Framework.Graphics;
namespace Application1
{
public partial class MainForm : Form
{
// Объявим поле графического устройства для видимости в методах
GraphicsDevice device;
public MainForm()
{
InitializeComponent();
// Подпишемся на событие Load формы
this.Load += new EventHandler(MainForm_Load);
}
void MainForm_Load(object sender, EventArgs e)
{
// Создаем объект представления для настройки графического устройства
PresentationParameters presentParams = new PresentationParameters();
// Настраиваем объект представления через его свойства
presentParams.IsFullScreen = false; // Включаем оконный режим
presentParams.BackBufferCount = 1; // Включаем задний буфер
// для двойной буферизации
// Переключение переднего и заднего буферов
// должно осуществляться с максимальной эффективностью
presentParams.SwapEffect = SwapEffect.Discard;
// Устанавливаем размеры заднего буфера по клиентской области окна формы
presentParams.BackBufferWidth = this.ClientSize.Width;
presentParams.BackBufferHeight = this.ClientSize.Height;
// Создадим графическое устройство с заданными настройками
device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware,
this.Handle, presentParams);
}
}
}
Прежде, чем создать объект графического устройства, мы создаем вспомогательный объект presentParams, через свойства которого устанавливаем настройки для будущего устройства. Размеры заднего буфера можно не задавать, поскольку они по умолчанию в объекте presentParams установлены по умолчанию в значение 0, а это значит, что устройство device само вычислит их. Передним буфером считается экран, а задний буфер добавляется для устранения мерцания, в итоге при добавлении одного заднего буфера обеспечивается режим двойной буферизации.
Таким образом, в приведенном коде мы создали графическое устройство со следующими характеристиками:
Устройство будет использовать видеоадаптер по умолчанию
Устройство будет аппаратным
Вывод будет осуществляться в оконном режиме на клиентскую поверхность текущей формы
Обработка вершин будет осуществляться средствами GPU - графического процессора видеокарты с двойной буферизацией