Новости | Конференция | Чат | База данных | Творчество | Сообщество | О сайте | English | Помощь сайту |
Что ж... Продолжим. Внимание! Для нормального восприятия данной статьи читатель должен знать основы объектно-ориентированного программирования. Итак. Сегодня мы рассмотрим класс, без которого невозможно создать ни одно графическое приложение с помощью библиотеки XNA framework... GraphicsDevice GraphicsDevice находится в пространстве имён Microsoft.Xna.Framework.Graphics Что касается предназначения данного класса, то тут всё просто: GraphicsDevice инкапсулирует в себе все свойства и методы (ну или почти все), необходимые для взаимодействия с графическим адаптером. Для программиста GraphicsDevice и является тем графическим адаптером, так как он инкапсулирует все свойства и методы, присущие видеокарте. Простыми словами именно с помощью экземпляра этого класса программа может узнать всё о видеокарте (поддерживаемые форматы, технологии и тд), провести операции рендеринга какой-либо модели, задать опции вывода на экран изображения (разрешение, глубина цвета, частота обновления) и тд и тп Вобщем, если вы хотите работать с видеокартой, то вы будете тем или иным образом работать с экземпляром этого класса. Конструктор класса GraphicsDevice имеет такой вид GraphicsDevice(GraphicsAdapter adapter, DeviceType deviceType, IntPtr renderWindowHandle, PresentationParameters presentationParameters) Опишем каждый из параметров конструктора
Расмотрим параметры подробней. adapter Экземпляр класса GraphicsAdapter инкапсулирует все основные свойства видеокарты. С помощью него можно узнать какие технологии поддерживает видеокарта, какие режимы работы монитора поддерживаются (разрешение, глубина цвета, частота обновления) и тд. Подробннее GraphicsAdapter будет рассмотрен в следующих статьях. Сейчас же стоит упомянуть, что перечень всех видеокарт, доступных на компьютере, можно найти в статической коллекции Adapters, находящейся в классе GraphicsAdapter. Так же стоит упомянуть о том, что получить экземпляр GraphicsAdapter, соответствующий видеокарте по-умолчанию можно через статическое свойство DefaultAdapter класса deviceType Перечисление, котрое может принимать три значения
renderWindowHandle Дескриптор явлвяется уникальным индетефикатором окна или компонента в системе. В случае использования Windows Forms дескриптор можно получить таким образом (объект окна или компонента).Handle presentationParameters В дальнейшем класс PresentationParameters будет рассматриваться подробней. Сейчас же стоит рассмотреть те свойства, которые будут нам нужны в близжайшее время.
Теперь можно перейти к примеру инициализации графического устройства Для этого нам нужно будет создать приложение Windows Forms (Windows Forms Application) После этого добавим ссылку на библиотеку Microsoft.XNA.Framework.dll в проект командой «AddReference» После этого пропишем нужное пространство имён using Microsoft.XNA.Framework.Graphics; Теперь необходимо создать обработчик на событие Load формы private void OnLoad(object sender, EventArgs e) { Создаём экземпляр класса PresentationParameters PresentationParameters presentationParameters = new PresentationParameters(); Указываем, что мы хотим получить оконный режим presentationParameters.IsFullScreen = false; Определяем один вспомогателбный буфер (двойная буферизация) presentationParameters.BackBufferCount = 1; Устанавливаем режим переключения между буферами «на выбор видеокарты» presentationParameters.SwapEffect = SwapEffect.Discard; Создаём новое устройство, указывая, что будет использоваться видеокарта по-умолчанию (GraphicsAdapter.DefaultAdapter) в режиме аппаратного ускорения (DeviceType.Hardware) в случае оконного режима, вывод будет осуществлятся на текущую форму (this.Handle) а так же передаём параметры изображения (presentationParameters) GraphicsDevice device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, this.Handle, presentationParameters); } Устройство готово. Теперь, для пробы, нужно сделать что-нибудь простое с ним. Как на счёт закрасить окно синим цветом? Для этого нам нужно создать обработчик события формы Paint public void OnPaint(object sender, PaintEventArgs e) { Очищаем форму синим цветом. Класс Color используется не стандартный, а собственный из библиотеки, что вызвано требованиями кроссплатформенности device.Clear(Microsoft.Xna.Framework.Graphics.Color.Blue); Вызываем метод, выводущий содержание буфера на экран device.Present(); } Ну как? Есть синее окно? Нет? Проблема в том, что событие формы Paint не обязательно вызывается сразу после загрузки. Что бы быть уверенными в том, что форма окрасится сразу в синий допишем одну строчку в конец обработчика события Load : this.Invalidate(); Ну и естестванно тут вы можете взять исходники примера для этого урока.
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дизайн Elite Games V5 beta.18 EGM Elite Games Manager v5.17 02.05.2010 |