Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
insrukcii k lr3_ robota z podiyamy.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
883.71 Кб
Скачать

В этой работе мы изучим совместное применение технологий 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 - графического процессора видеокарты с двойной буферизацией

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]