DirectX. Использование возможностей по выводу графики
Краткое сожержание материала:
Размещено на
Содержание
Цель работы
Краткая теория
Описание используемых DirectX-функций
Исходный текст отлаженной программы
Результаты работы программы
Вывод
Цель работы
Использование DirectX для решения задач по выводу и обработке графики в Microsoft Windows.
В качестве задачи взята проблема проверки принадлежности точки полигону. Так как в нашем случае важен не сам алгоритм, а демонстрация работы DirectX, то задача максимально упрощена и в качестве полигона берется его частный случай - треугольник, а в качестве точки - текущее положение указателя мышки.
Краткая теория
DirectX (от англ. direct -- прямой, непосредственный) -- это набор API, разработанных для решения задач, связанных с программированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр. Пакет средств разработки DirectX под Microsoft Windows бесплатно доступен на сайте Microsoft. Зачастую обновленные версии DirectX поставляются вместе с игровыми приложениями.
Практически все части DirectX API представляют собой наборы COM-совместимых объектов.
В целом, DirectX подразделяется на:
DirectX Graphics, набор интерфейсов, ранее (до версии 8.0) делившихся на:
DirectDraw : интерфейс вывода растровой графики. (Его разработка давно прекращена)
Direct3D (D3D): интерфейс вывода трёхмерных примитивов.
DirectInput: интерфейс, используемый для обработки данных, поступающих с клавиатуры, мыши, джойстика и пр. игровых контроллеров.
DirectPlay: интерфейс сетевой коммуникации игр.
DirectSound: интерфейс низкоуровневой работы со звуком (формата Wave)
DirectMusic: интерфейс воспроизведения музыки в форматах Microsoft.
DirectShow: интерфейс, используемый для ввода/вывода аудио и/или видео данных.
DirectX Instruments -- технология, позволяющая на основе мультимедийного API DirectX создавать и использовать программные синтезаторы. В отличие от DX-плагинов, такие программы могут полностью управляться по MIDI и служат главным образом не для обработки, а для синтеза звука. Технология DXi была популярна в 2001--2004 гг., особенно в программных продуктах Cakewalk, но со временем проиграла «войну форматов» технологии VST от Steinberg.
DirectSetup: часть, ответственная за установку DirectX.
DirectX Media Objects: реализует функциональную поддержку потоковых объектов (например, кодировщики/декодировщики)
Direct2D : интерфейс вывода двухмерной графики
DirectX пришел на смену GDI. Простые игры, которые не требуют быстрой графики, могут использовать GDI. Однако GDI не обеспечивает качественной анимации, поскольку в нём нет возможности синхронизации с кадровым буфером. Также, в GDI нет растеризации для отрисовки 3D-графики. Современные игры используют DirectX или OpenGL, что даёт программистам доступ к большему количеству аппаратных возможностей.
Но DirectX используется не только в играх, но и в клиентских приложениях. Начиная с версии 3.0 .NET Framework начал в себя включать WPF (Windows Presentation Foundation) - систему для построения клиентских приложений под Windows.
В основе WPF лежит векторная система визуализации, не зависящая от разрешения устройства вывода и созданная с учётом возможностей современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, макеты, двухмерную и трёхмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа и оформление.
Графической технологией, лежащей в основе WPF, является именно DirectX, в отличие от Windows Forms, где используется GDI/GDI+. Производительность WPF выше, чем у GDI+ за счёт использования аппаратного ускорения графики через DirectX.
Описание используемых DirectX-функций
IDirect3D9* Direct3DCreate9(
UINT SDKVersion
);
Parameters
SDKVersion
Type: UINT
Return value
Type: IDirect3D9*
HRESULT CreateDevice(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[in] HWND hFocusWindow,
[in] DWORD BehaviorFlags,
[in, out] D3DPRESENT_PARAMETERS *pPresentationParameters,
[out, retval] IDirect3DDevice9 **ppReturnedDeviceInterface
);
Return value
Type: HRESULT
HRESULT D3DXCreateFont(
_In_ LPDIRECT3DDEVICE9 pDevice,
_In_ INT Height,
_In_ UINT Width,
_In_ UINT Weight,
_In_ UINT MipLevels,
_In_ BOOL Italic,
_In_ DWORD CharSet,
_In_ DWORD OutputPrecision,
_In_ DWORD Quality,
_In_ DWORD PitchAndFamily,
_In_ LPCTSTR pFacename,
_Out_ LPD3DXFONT *ppFont
);
Parameters
pDevice [in]
Type: LPDIRECT3DDEVICE9
Указатель на IDirect3DDevice9 интерфейс, который ассоциируется с шрифтом.
Height [in]
Type: INT
Высота символа в логических единицах.
Width [in]
Type: UINT
Ширина символа в логических единицах.
Weight [in]
Type: UINT
Вес шрифта.
Italic [in]
Type: BOOL
True для italic шрифта, иначе false.
pFacename [in]
Type: LPCTSTR
Строка с именем шрифта.
ppFont [out]
Type: LPD3DXFONT*
Возвращает указатель на ID3DXFont интерфейс, представляющий созданный объект шрифта.
Return value
Type: HRESULT
INT DrawText(
[in] LPD3DXSPRITE pSprite,
[in] LPCTSTR pString,
[in] INT Count,
[in] LPRECT pRect,
[in] DWORD Format,
[in] D3DCOLOR Color
);
Parameters
pSprite [in]
Type: LPD3DXSPRITE
Указатель на ID3DXSprite, содержащий строку. Может быть NULL, если Direct3D будет отрисовывать строку своим sprite object.
pString [in]
Type: LPCTSTR
Указатель на строку для вывода. Если параметр Count равен -1, то строка должна быть null-terminated.
Count [in]
Type: INT
Количество символов в строке.
pRect [in]
Type: LPRECT
Указатель на RECT, содержащий область, в которой будет отрисовываться текст.
Format [in]
Type: DWORD
Метод форматирования текста.
Color [in]
Type: D3DCOLOR
Цвет текста.
Return value
Type: INT
HRESULT CreateVertexBuffer(
[in] UINT Length,
[in] DWORD Usage,
[in] DWORD FVF,
[in] D3DPOOL Pool,
[out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
[in] HANDLE *pSharedHandle
);
Parameters
Length [in]
Type: UINT
Длина буфера в байтах
FVF [in]
Type: DWORD
Комбинация D3DFVF, определяет формат вершин в этом буфере
Pool [in]
Type: D3DPOOL
Член D3DPOOL тип перечисления представляет собой рабочий класс памяти в который отправляется ресурс. Не устанавливать D3DPOOL_SCRATCH.
ppVertexBuffer [out, retval]
Type: IDirect3DVertexBuffer9**
Адрес на указатель IDirect3DVertexBuffer9 интерфейса, представляет созданный буферный ресурс.
pSharedHandle [in]
Type: HANDLE*
Занято. Установить этот параметр в NULL.
Return value
Type: HRESULT
HRESULT Clear(
[in] DWORD Count,
[in] const D3DRECT *pRects,
[in] DWORD Flags,
[in] D3DCOLOR Color,
[in] float Z,
[in] DWORD Stencil
);
Parameters
Count [in]
DirectX 9. Уроки программирования на C++
Рассмотрено профессиональное программирование трехмерной графики под Windows на языке C++ с использованием библиотеки DirectX 9. Раскрыты возможности...
Сравнение возможностей графических систем OpenGL и DirectX
Общая характеристика основных и дополнительных возможностей графического стандарта OpenGL в области компьютерной графики. Исследование набора определе...
DirectX 9. Уроки программирования на C++ (+ Code)
Рассмотрено профессиональное профаммирование трехмерной графики под Windows на языке C++ с использованием технологии DirectX 9. Раскрыты возможности к...
DirectX 10 - это просто. Программируем графику на С++
Рассмотрено создание графических приложений для Windows на С++ с использованием новой версии компонента Direct3D 10, входящего в состав библиотеки Dir...
OpenGL и DirectX: программирование графики. Для профессионалов
Задачи, связанные с различными аспектами компьютерной графики, возникают в самых различных сферах применения информационных технологий. Иногда они явл...