Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 10:

Введение в DirectX

Аннотация: Библиотека классов DirectX. Установка Microsoft ® DirectX ® 9.0 SDK Update (Summer 2003). Пространство имен Microsoft.DirectX.Direct3D. Создание устройства. Рисование плоского и трехмерного треугольника. Задание положения треугольника в мировых координатах. Создание перспективы. Добавление камеры. Отключение потребности в освещении сцены. Вращение треугольника вокруг координатной оси. Вращение треугольника вокруг произвольной оси. Обработка события изменения размеров окна. Создание освещения сцены. Хранение треугольника в вершинном буфере.
Ключевые слова: directx, .NET Framework, корпорация, аппаратное обеспечение, SDK, макрос, корневой каталог, direct3d, directdraw, протокол обмена, MIDI, WAV, win32, diagnostics, контроль доступа, permissions, защита доступа, IDE, Visual Studio .Net, install, приложение, project, self-reference, пункт, device-specific, класс, графическая карта, конструктор класса, adaptability, адаптер, hardware-specific, растеризация, rasterization, multithreads, центральный процессор, представление данных, логическая переменная, discard, flip, установка значений, значение, программные средства, слово, команда, paint, override, параметр, clearing, цвет фона, аналогия, дисплей, визуализация, информация, грань объекта, буфер, U-кадры, массив, координаты, место, градиент, Windows, system, graphics device, interface, объект, transform, coordinate, 3D, пространство, тип массива, проекция, matrix, матрица проекций, система координат, функция, синтаксис, Пирамида, плоскость, single-ended, псевдоним, FLOAT, параметр функции, поле зрения, сечение, отношение, вызов функции, вершина, geometry, invalid, environment, wide-angle, Приращение, стабильность, таймер, аргумент, face, cull, отсечение, обработка событий, light, point, компонент, диапазон, расстояние, норма, вектор, мультимедиа, перегрузка, встроенные структуры, usage, 'clip', dynamic, патч, patching, аппаратные средства, буфер данных, pooling, пул памяти, AGP, scratch, управление данными, обращение к функции, производительность, запись, список, поток, пул, ссылка

Файлы к лабораторной работе Вы можете скачать здесь.

Библиотека классов DirectX является расширением базовой библиотеки .NET Framework и представляет собой новую поддержку современной технологии программирования, разработанной корпорацией Microsoft. Сама технология основывается на трех положениях:

  1. Производители аппаратного обеспечения поддерживают технологию DirectX
  2. Операционная система Windows поддерживает технологию DirectX
  3. Пакет разработчика DirectX 9.0 SDK Update ( Summer 2003 ) от Microsoft содержит большой набор готовых интерфейсов, классов, функций, макросов, структур и констант, значительно упрощающих технологию разработки компьютерных игр для операционной системы Windows

DirectX 9.0 предоставляет возможность программисту разрабатывать приложения, осуществляющие работу со звуком, сетью, трехмерной графикой, видео и построен в виде набора компонентов. Все компоненты пакета DirectX распределены по пространствам имен

Пространства имен управляемого DirectX
Пространство имен Пояснения
Microsoft.DirectX Корневой каталог, содержащий все общие коды.
Microsoft.DirectX.Direct3D DirectDraw3D API объемная графика, также как вспомогательная библиотека D3DX.
Microsoft.DirectX.DirectDraw Графика DirectDraw API. DirectDraw позволяет рисовать на экране двухмерную графику, однако этот компонент давно не обновлялся и его текущая версия числится под номером 7 (DirectDraw 7). В настоящее время Microsoft заморозила его поддержку и рекомендует пользоваться Direct3D, который тоже может рисовать двухмерную графику.
Microsoft.DirectX.DirectPlay Обеспечивает работу приложения с сетью и основан на своем протоколе обмена информацией.
Microsoft.DirectX.DirectSound Отвечают за музыку и звук, делая возможным воспроизведение MIDI- и WAV-файлов. Текущая версия числится под номером 8.
Microsoft.DirectX.DirectInput Пользовательский вход в DirectInput API. DirectInput обеспечивает взаимодействие программы с устройствами ввода, а именно с клавиатурой, мышью, джойстиком и рулем. Он обеспечивает максимально возможную скорость в играх, работая напрямую с аппаратным обеспечением компьютера в обход сервисов операционной системы. Стандартные средства Win32 не в силах обеспечить такую скорость. Корпорация Microsoft приняла решение пока не обновлять DirectInput, поскольку заложенного в него потенциала хватит на несколько ближайших лет.
Microsoft.DirectX.AudioVideoPlayback API простого звукового и видео воспроизведения.
Microsoft.DirectX.Diagnostics Простая диагностика API.
Microsoft.DirectX.Security Контроль доступа на глубокие уровни DirectX.
Microsoft.DirectX.Security.Permissions Классы разрешения для защиты доступа.

Установка 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

  1. public Device ( System.IntPtr lp )
  2. 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 )
  3. 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
    Обычно применяется опция DeviceType.Hardware, подразумевающая использование аппаратного устройства. Опция DeviceType.Reference позволяет использовать дополнительное или эмулированное устройство растеризации (rasterizer), реализующее все возможности Direct3D Realtime, но работающее чрезвычайно медленно. Эту опцию целесообразно использовать для отладки программ или для проверки параметров приложений, не поддерживаемых видеокартой разработчика. Опция DeviceType.Software позволяет использовать программный rasterizer.
  • 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
    Пока мы будем использовать флажок 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 - будет создан вторичный буфер и произойдет копирование в него из первичного буфера независимо от состояния последнего
    Далее мы воспользуемся опцией SwapEffect.Discard.
Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000