Введение в DirectX
Файлы к лабораторной работе Вы можете скачать здесь.
Библиотека классов DirectX является расширением базовой библиотеки .NET Framework и представляет собой новую поддержку современной технологии программирования, разработанной корпорацией Microsoft. Сама технология основывается на трех положениях:
- Производители аппаратного обеспечения поддерживают технологию DirectX
- Операционная система Windows поддерживает технологию DirectX
- Пакет разработчика DirectX 9.0 SDK Update ( Summer 2003 ) от Microsoft содержит большой набор готовых интерфейсов, классов, функций, макросов, структур и констант, значительно упрощающих технологию разработки компьютерных игр для операционной системы Windows
DirectX 9.0 предоставляет возможность программисту разрабатывать приложения, осуществляющие работу со звуком, сетью, трехмерной графикой, видео и построен в виде набора компонентов. Все компоненты пакета DirectX распределены по пространствам имен
Установка Microsoft R DirectX R 9.0 SDK Update (Summer 2003)
Устанавливаемый пакет является расширением среды разработчика (IDE) Visual Studio .NET 2005, поэтому прежде всего на вашем компьютере должна быть эта среда.
- Вставте диск с пакетом DirectX и запустите программу Install.exe
- Выполните пункт Install DirectX 9.0 SDK
- Следуйте инструкциям мастера установки
Пакет установки возьмите у преподавателя или купите на рынке.
Создание заготовки приложения
Далее мы будем создавать приложение на основе управляемого DirectX ( Managed DirectX ).
- Выберите папку размещения файлов проекта и создайте проект C# с именем SimpleMedia
- Удалите ссылки на ненужные нам на данном этапе библиотеки
- Используя меню Project, выполните команду Add Reference и добавьте к проекту нужные нам ссылки на сборки пакета DirectX
- Откройте файл Form1.cs в режиме View Code, добавьте в начало файла ссылки на пространства имен только что добавленных библиотек и закомментируйте ссылки на System.Data и System.Text
//using System.Data; //using System.Text; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; namespace SimpleMedia { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } }Листинг 10.1. Добавление ссылок на пространства имен в файл Form1.cs
Последний пункт действий является необязательным, но позволяет не классифицировать каждый раз объекты перед их использованием полными именами с префиксами пространств имен.
Пространство имен Microsoft.DirectX.Direct3D
Для рисования графики на форме мы будем использовать компоненты, расположенные в пространстве имен Microsoft.DirectX.Direct3D
Непосредственное выполнение всех графических операций осуществляется классом Device (устройство). Условно можно представить, что для программиста этот класс аналогичен графическому устройству и графической карте, установленной на компьютере.
Существуют три перегруженных версии конструктора класса устройства Microsoft.DirectX.Direct3D.Device
- public Device ( System.IntPtr lp )
- public Device ( System.Int32 adapter, Microsoft.DirectX.Direct3D.DeviceType deviceType, System.Windows.Forms.Control renderWindow, Microsoft.DirectX.Direct3D.CreateFlags behaviorFlags, Microsoft.DirectX.Direct3D.PresentParameters presentationParameters )
- public Device ( System.Int32 adapter , Microsoft.DirectX.Direct3D.DeviceType deviceType , System.IntPtr renderWindowHandle , Microsoft.DirectX.Direct3D.CreateFlags behaviorFlags , Microsoft.DirectX.Direct3D.PresentParameters presentationParameters )
Пока мы будем использовать только вторую версию конструктора. Рассмотрим параметры этого конструктора:
- adapter - относится к тому физическому устройству, которое мы хотим классифицировать. Каждое устройство в компьютере имеет идентификатор адаптера (от 0 до числа, на единицу меньшего, чем число имеющихся устройств). Нулевое значение для параметра adapter подразумевает установку устройства по умолчанию.
-
deviceType (тип устройства)
- сообщает приложению, какой тип устройства мы хотим создать.
Значением этого параметра является одно из полей структуры Microsoft.DirectX.Direct3D.DeviceType
- Microsoft.DirectX.Direct3D.DeviceType.Hardware
- Microsoft.DirectX.Direct3D.DeviceType.Reference
- Microsoft.DirectX.Direct3D.DeviceType.Software
- renderWindow связывает окно с созданным устройством, назначая его в качестве окна рендеринга (выдачи результата). Для этого параметра можно использовать форму, панель или любой другой производный от класса Control класс. На данном этапе мы будем использовать только формы.
-
behaviorFlags (флажки
режимов) - используется для управления режимами устройства
после его создания. Может комбинироваться операцией поразрядного
сложения "|",
что позволяет установить множественные режимы работы устройства.
Некоторые из этих флажков являются взаимоисключающими.
Значения параметра определяются перечислением Microsoft.DirectX.Direct3D. CreateFlags:
- Microsoft.DirectX.Direct3D.CreateFlags.AdapterGroupDevice
- Microsoft.DirectX.Direct3D.CreateFlags.DisableDriverManagement
- Microsoft.DirectX.Direct3D.CreateFlags.FpuPreserve
- Microsoft.DirectX.Direct3D.CreateFlags.HardwareVertexProcessing
- Microsoft.DirectX.Direct3D.CreateFlags.MixedVertexProcessing
- Microsoft.DirectX.Direct3D.CreateFlags.MultiThreaded
- Microsoft.DirectX.Direct3D.CreateFlags.PureDevice
- Microsoft.DirectX.Direct3D.CreateFlags.SoftwareVertexProcessing
-
presentationParameters -
управляет представлением данных на экране. Посредством
этого параметра можно управлять любыми параметрами
отображаемых данных. Параметр представляет собой экземпляр
класса Microsoft.DirectX.Direct3D.PresentParameters, имеющего,
в частности, свойства
- Microsoft.DirectX.Direct3D.PresentParameters.Windowed - является логической переменной, определяющей, работает ли устройство в полноэкранном режиме (значение false ) или в оконном режиме (значение true )
-
Microsoft.DirectX.Direct3D.PresentParameters.SwapEffect -
используется для описания режима буферной подкачки
- SwapEffect.Discard - сбрасывает содержимое буфера, если он не готов к представлению
- SwapEffect.Copy - сходно со значением Flip, но требует от программиста установки значения 1 для числа вторичных буферов
- SwapEffect.Flip - будет создан вторичный буфер и произойдет копирование в него из первичного буфера независимо от состояния последнего