"розвантажена" GPU дозволяє використати зовсім нові, більш складні й точні методи імітації шкіри, прискорення морфінга, генерування тіней й екструзії, дрібних деталей, фізичних й інших ефектів.
От у цьому, по суті, і полягає основний "розлом" між нинішніми поколіннями графіки й "залізом" під Direct3D 10: у той час як Direct3D 9 може працювати з картами епохи Direct7, Direct3D 10 працює тільки з новими поколіннями графічних акселераторів, починаючи з GeForce 8800.
Щодо підтримки OpenGL. Варто відзначити, що Windows Vista надає ту ж підтримку OpenGL, що й Windows XP, для цього буде потрібно інстальований драйвер-клієнт (Installable Client Driver, ICD) під OpenGL від виробника відеокарти. У більшості випадків відсутність нової версії ICD під Windows Vista забезпечить підтримку лише рівня OpenGL v1.1.
Із часів Direct 8.0 до складу Direct входили такі API як:
DirectDraw - 2D растрова графіка
Direct3D - D3D, 3D графіка
DirectInput - обробка дані клавіатури, мишки, джойстика й інших ігрових контролерів
DirectPlay - мережеві комунікації в іграх
DirectSound - запис і відтворення звуку
DirectSound3D - DS3D, 3D звук
DirectMusic - відтворення саундтреків з DirectMusic Producer
DirectSetup - інсталяція компонентів, не реалізованих в API Direct
Direct Media - сполучення DirectAnimation, DirectShow, Direct Video Acceleration, Direct3D Retained Mode й Direct Transform, відповідно, для анімації, відтворення мультимедія й потокові додатки, 3D й інтерактиви
Direct Media Objects - підтримка об'єктів потокової обробки - кодіровщиків, декодерів, ефектів
В Windows Vista реалізована підтримка тих же інтерфейсів Direct3D й DirectDraw, як в Windows XP, починаючи з Direct 3, за винятком режиму Retained Mode в Direct3D. Хіба що можна відзначити обмеження для повноцінних 64-бітних додатків Windows XP Professional x64 Edition, підтримка функцій яких під Windows Vista обмежена Direct3D9, DirectDraw7 і більш новими версіями інтерфейсів.
3. ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ DIRECTX
3.1 Побудова сцени
Direct містить у собі рівень абстракції - HAL (Hardware Abstraction Layer). За допомогою HAL відбувається взаємодія додатка з устаткуванням комп'ютера, поза залежністю від виготовлювача встаткування. Це дає можливість написаному коду працювати на будь-якому апаратному забезпеченні без внесення параметрів цього встаткування.
Вся бібліотеки DirectX побудована на основ СОМ (Component Object Model). Вам не прийде заглиблюватися в сутність цієї технології, тому що вся робота із СОМ заснований на викликах відповідних функцій. У складі СОМ є API, називана СОМ-бібліотекою; з її допомогою досягається керування всіма компонентами. Кожний із програмних компонентів реалізує певну кількість СОМ-об'єктів, доступ до яких здійснюється за допомогою інтерфейсів, які, у свою чергу складаються з функцій. За допомогою цих функцій і відбувається взаємодія із СОМ-об'єктом.
Перш ніж почати програмувати, потрібно чітко представляти схему побудови сцени.
- Створення віконного додатка. Частина програми взаємодіюча з Windows.
- Ініціалізація Direct3D. Створення інтерфейсів, ініціалізація 3D пристроїв, настроювання програмної й апаратної частини комп'ютера.
- Створення об'єкта. Уведення координат вершин трикутників з яких складається об'єкт, призначення формату вершин для наступної трансформації.
- Висвітлення, призначення матеріалу, накладення текстур. Створення джерел висвітлення й накладення текстур на об'єкти сцени.
- Рендер сцени. Відрисовка всіх об'єктів з урахуванням висвітлення, кута огляду, видимості об'єктів, що падають тіней ... До цього ми тільки вводили параметри всіх складових, а тепер відеокарта робить розрахунок і вивід на екран всієї сцени.
Звичайно, на ці етапи ділити створення тривимірного додатка можна тільки умовно, але все-таки таке розкладання допомагає зрозуміти загалом створення додатка.
3.2 Основні функції для реалізації програми
- IDirect3D9 *Direct3DCreate9(UINT SDKVersion)
Повертає покажчик на інтерфейс IDirect3D9. Функція використовує тільки один макрос D3D_SDK_VERSION, що визначений у заголовному файлі d3d9.h, що вказує на поточну версію SDK. Якщо функція повернула NULL, то очевидно Direct3D не встановлений на комп'ютері користувача.
- HRESULT GetAdapterDisplayMode(UINT Adapter, D3DDISPLAYMODE *pMode)
Повертає поточний режим відображення адаптера.
Adapter - відеоадаптер дисплея, значення D3DADAPTER_DEFAULT використовує завжди первинний адаптер за замовчуванням.
pMode - покажчик на структуру D3DDISPLAYMODE, що містить опис поточного режиму адаптера. Значення, що повертає адаптер. Якщо функція завершена успішно, тоді повертається значення D3D_OK. Якщо Adapter або pMode невірний, тоді повертається значення D3DERR_INVALIDCALL.
- D3DDISPLAYMODE
Опис поточного режиму адаптера
typedef struct _D3DDISPLAYMODE
{
UINT Width; //ширина робочої поверхні екрана в пікселях
UINT Height; //висота робочої поверхні екрана в пікселях
UINT RefreshRate; //частота регенерації, значення 0 - за замовчуванням
D3DFORMAT Format; //формат режиму візуального відображення
} D3DDISPLAYMODE;
- D3DFORMAT
Тип, що перераховує, визначальні типи поверхневих форматів. Повний опис можна переглянути в MSDN, тут розглянуті тільки найбільш використовувані.
Таблиця 3.2.1 - Визначальні типи поверхневих форматів
Прапорець | Значення | Опис
D3DFMT_UNKNOWN | 0 | формат поверхні, використовуваної за замовчуванням
D3DFMT_R8G8B8 | 20 | 24-бітний формат RGB
D3DFMT_A8R8G8B8 | 21 | 32-бітний формат АRGB
D3DFMT_D16_LOCKABLE | 70 | 16-бітний формат буфера глибини
D3DFMT_D32 | 71 | 32-бітний формат буфера глибини
D3DFMT_D15S1 | 73 | 16-бітний формат буфера глибини, де 15 біт – канал глибини, 1 біт – канал трафарету
D3DFMT_D24S8 | 75 | 32-бітний формат буфера глибини, де 24 біта – канал глибини, 8 біт – канал трафарету
D3DFMT_D24X8 | 77 | 32-бітний формат буфера глибини, де 24 біта – резервуються для каналу глибини
D3DFMT_D24X4S4 | 79 | 32-бітний формат буфера глибини, де 24 біта канал глибини, 4 біти – канал трафарету
D3DFMT_D16 | 80 | 16-бітний формат буфера глибини
D3DFMT_VERTEXDATA | 100 | Формат поверхні буфера глибини
D3DFMT_INDEX16 | 101 | 16-бітний індекс буфера глибини
D3DFMT_INDEX32 | 102 | 32-бітний індекс буфера глибини
- typedef struct _D3DPRESENT_PARAMETERS_
UINT BackBufferWidth;
UINT BackBufferHeight;
D3DFORMAT BackBufferFormat;
UINT BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
D3DSWAPEFFECT SwapEffect;
HWND hDeviceWindow;
BOOL Windowed;
BOOL EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
DWORD Flags;
UINT FullScreen_RefreshRateInHz;
UINT FullScreen_PresentationInterval;
} D3DPRESENT_PARAMETERS;
Опис параметрів.
BackBufferWidth й BackBufferHeight - ширина й висота нових задніх буферів, у пікселях. Якщо