Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«DirectX 8. НачинаСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с DirectX GraphicsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 5

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ Π’Π°Ρ‚ΠΊΠΈΠ½

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, CurrentFilter);

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MINFILTER, CurrentFilter);

g_pD3DDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, CurrentFilter);

ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ ΠΈΠ· VB, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ сам Π±ΡƒΡ„Π΅Ρ€ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½, Ρ‡Ρ‚ΠΎ дСлаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ двумя строками:

g_pD3DDevice->SetStreamSource(0, g_pVB, sizeof(MYVERTEX));

g_pD3DDevice->SetVertexShader(D3DFVF_MYVERTEX);

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†! ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°! ДСлаСтся это всСго ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ DrawPrimitive(). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ хранятся Π² VB Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Π’ нашСм случаС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ задаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² (D3DPT_TRIANGLELIST). Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, с ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈΠ· VB Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ отрисовку. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” количСство ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² (Π² нашСм случаС Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ.

g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);

Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ сцСну:

g_pD3DDevice->EndScene();

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ бэк-Π±ΡƒΡ„Π΅Ρ€ Π½Π° экранС:

g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

Ѐункция Deinitialization()

Для освобоТдСния Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° (Ссли Π½Π΅ всСх) Π²ΠΈΠ΄ΠΎΠ² рСсурсов Π² D3D ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция Release():

if (g_pTexture != NULL) g_pTexture->Release();

if (g_pVB != NULL) g_pVB->Release();

if (g_pD3DDevice != NULL) g_pD3DDevice->Release();

if (g_pD3D != NULL) g_pD3D->Release();

Π’Π°ΠΊΠΆΠ΅, ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ зарСгистрированный класс ΠΎΠΊΠ½Π°:

UnregisterClass("PyramidClass", wclass.hInstance);

Ѐункция MessageProc()

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° сообщСний: WM_KEYDOWN (Π½Π°ΠΆΠ°Ρ‚Π° клавиша) ΠΈ WM_DESTROY (ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΎ ΠΎΠΊΠ½ΠΎ прилоТСния).

ΠŸΡ€ΠΈ поступлСнии сообщСния WM_KEYDOWN ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши:

case WM_KEYDOWN:

 int VK;

 VK = (int)wParam;

Из клавиш, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Esc, F1, F2, F3, F4. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° Esc ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, ΠΊΠ°ΠΊ Π½ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ это Π·Π²ΡƒΡ‡ΠΈΡ‚ :)) Если Π½Π°ΠΆΠ°Ρ‚Π° клавиша F1-F4, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° (пСрСмСнная CurrentFilter) ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°:

switch(VK) {

case VK_ESCAPE:

 PostQuitMessage(0);

 return 0;

  //...

case VK_F2:

 CurrentFilter = D3DTEXF_POINT;

 SetWindowText(hWnd, "D3D Pyramid (Filter=D3DTEXF_POINT)");

 break;

 //...

}

ΠŸΡ€ΠΈ поступлСнии сообщСния WM_DESTROY, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ дСйствия, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ производящимся ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ клавиши Esc:

case WM_DESTROY:

 PostQuitMessage(0);

 return 0;

ΠŸΡ€ΠΈΠ΅Ρ…Π°Π»ΠΈ! Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° достаточно для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ написания простых 3D-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (для написания ΠΈΠ³Ρ€Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ). Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ настройками D3D, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°ΠΉ волю своСму Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ! И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, попытайся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сам (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈΠ»ΠΈ ΠΊΡƒΠ±). Волько Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Накапливай опыт…

Π£Π΄Π°Ρ‡ΠΈ!

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ:

1. Помни, Ρ‡Ρ‚ΠΎ для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… D3DX, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» d3dx8.lib (вмСстС с d3d8.lib)! Π•Ρ‰Π΅ Ρ€Π°Π· напомню, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

 a. Project->Settings…

 b. Π’ΠΊΠ»Π°Π΄ΠΊΠ° "Link"

 c. Π’ строкС "Object/library modules" добавь Π² Π½Π°Ρ‡Π°Π»ΠΎ "d3d8.lib d3dx8.lib"

 d. Π”ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: "d3d8.lib d3dx8.lib kernel32.lib user32.lib gdi32.lib…"

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ„Π°ΠΉΠ» texture.jpg β€” ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ exe'шник.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Автор: voxatu.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги ΠΏΠΎΠ΄ DirectX 8. (Π§Π°ΡΡ‚ΡŒ 1)

Автор: Π‘Π΅Ρ€Π³Π΅ΠΉ Π’Π°Ρ‚ΠΊΠΈΠ½.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π° вашСй машинС установлСн компилятор C++ ΠΈ DirectX8 SDK. Если Ρƒ вас Π½Π΅Ρ‚ DirectX8 SDK, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с сайта Microsoft, ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ скачиваСмый Ρ„Π°ΠΉΠ» Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 140 Мб.

Π”Π°Π»ΡŒΡˆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΊ DirectX, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ (.h β€” Ρ„Π°ΠΉΠ»Π°ΠΌ) ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌ статичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (.lib). НапримСр, Π’ Visual C++ это дСлаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. МСню Tools/Options Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Options. Π’ Π½Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ Directories ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ· списка Show directories for спСрва Include files для ΠΏΡƒΡ‚ΠΈ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π·Π°Ρ‚Π΅ΠΌ добавляСм ΠΏΡƒΡ‚ΡŒ (ΠΏΠ°ΠΏΠΊΠ° Include Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΡƒΠ΄Π° установлСн DirectX SDK) ΠΈ выставляСм Π΅Π³ΠΎ, наТимая Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ "стрСлочка Π²Π²Π΅Ρ€Ρ…", Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. Аналогично ΠΈ для ΠΏΡƒΡ‚ΠΈ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ· списка Show directories for ΠΏΡƒΠ½ΠΊΡ‚ Library files ΠΈ добавляСм ΠΏΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ (дирСктория LIB Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ DirectX SDK).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ DirectX. Для этого познакомимся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ интСрфСйсами Direct3D ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° d3d ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция Direct3DCreate8():

pD3D = Direct3DCreate8(D3D_SDK_VERSION);

здСсь pD3D β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйс IDirect3D8, D3D_SDK_VERSION объявлСно Π² d3d8.h.

Π€Π°ΠΉΠ» d3d8.h содСрТит объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Direct3D. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² свой ΠΊΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ прСпроцСссора:

#include <d3d8.h>

Ѐункция Direct3DCreate8() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ d3d. Если ΠΎΠ½Π° Π²Π΅Ρ€Π½ΡƒΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ DirectX8. Π’ этом случаС ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ своё Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ занимаСтся просчётом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° экран Π² Direct3D, называСтся Direct3D device. Он Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈ сохраняСт установки, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ просчёта, занимаСтся опСрациями трансформации, освСщСния ΠΈ растСризациСй. ΠœΠ΅Ρ‚ΠΎΠ΄ CreateDevice() интСрфСйса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° d3d создаёт Ρ‚Π°ΠΊΠΎΠΉ device. Одним ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ структурного Ρ‚ΠΈΠΏΠ° D3DPRESENT_PARAMETERS. Для ознакомлСния с Direct3D, ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² значСния всСх ΠΏΠΎΠ»Π΅ΠΉ этой структуры. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ сСйчас понадобятся. ПолС Windowed ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π° вСсь экран ΠΈΠ»ΠΈ Π² ΠΎΠΊΠ½Π΅; Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ соотвСтствСнно FALSE ΠΈΠ»ΠΈ TRUE.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ пСрСрисовываСтся Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, всС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ выводят спСрва Π² Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ области видСопамяти, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ back buffer (Π·Π°Π΄Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°Π΄Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ прорисован, Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ Π² Π²ΠΈΠ΄ΠΈΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти β€” front buffer ΠΈΠ»ΠΈ render target. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π½Π° вСсь экран, Ρ‚ΠΎ Π² ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Ρ‚ нСобходимости, достаточно просто Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Direct3D какая Ρ‡Π°ΡΡ‚ΡŒ видСопамяти являСтся Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ (flip) Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Ясно, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π² ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ back buffer'Π° Π² front buffer. ПолС SwapEffect ΠΌΡ‹ выставим Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ d3dswapeffect_discard Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ back buffer для отобраТСния.

BackBufferFormat β€” Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ структуры D3DPRESENT_PARAMETERS, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Direct3D, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ back buffer. ΠŸΡƒΡΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, для простоты, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π² ΠΎΠΊΠ½ΠΎ. Π€ΠΎΡ€ΠΌΠ°Ρ‚ back buffer'Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ front buffer'Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² нашСм случаС совпадаСт с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ desktop'Π°. Π•Π³ΠΎ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ интСрфСйса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° d3d GetAdapterDisplayMode(), ΡƒΠΊΠ°Π·Π°Π² Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° D3DADAPTER_DEFAULT.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Direct3D для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ просчёта ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

// функция Init создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ d3d ΠΈ d3d device

bool Init(HWND hWnd) {

 if (pD3d = Direct3DCreate8(D3D_SDK_VERSION)) {

  D3DDISPLAYMODE d3ddm; // ΠΎΡ‚ΡΡŽΠ΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π΅ Format

  if (FAILED(pD3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))

   return false;

  D3DPRESENT_PARAMETERS d3dpp;

  ZeroMemory(&d3dpp, sizeof(d3dpp)); // выставляСм Π² 0 всС поля d3dpp

  d3dpp.Windowed = TRUE;

  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

  d3dpp.BackBufferFormat = d3ddm.Format;

  if (FAILED(pD3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice))) {

   return false;

  }

  return true;

 }

 returnfalse;

}

Π—Π΄Π΅ΡΡŒ pD3d β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ d3d, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ

IDirect3D8 * pD3d;

Π° pDevice β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° интСрфСйс device'Π°

IDirect3DDevice8 * pDevice;

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ CreateDevice() Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ D3DDEVTYPE_HAL. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пытаСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ устройство просчёта, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ hardware.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли наша функция Init() Π²Π΅Ρ€Π½ΡƒΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ инициализация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. ПослС этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ срСдствами DirectX. Об этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΡƒΡ€ΠΎΠΊΠ°. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹ΡˆΠ΅ сказанному, Ρ€Π°Π· ΡƒΠΆ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ DirectX ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ COM ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Release(), для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

// функция ReleaseAll освобоТдаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ d3d device ΠΈ d3d

void ReleaseAll() {

 // ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС создания

 if (pDevice) pDevice->Release();

 if (pD3d) pD3d->Release();

}

ПовСдал: Π’Π°Ρ‚ΠΊΠΈΠ½.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги ΠΏΠΎΠ΄ DirectX 8. (Π§Π°ΡΡ‚ΡŒ 2)

Автор: Π‘Π΅Ρ€Π³Π΅ΠΉ Π’Π°Ρ‚ΠΊΠΈΠ½.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вывСсти ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π›ΡŽΠ±ΠΎΠΉ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти DirectX, являСтся полигональной модСлью. Π’ΠΎ Π΅ΡΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ состоит ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ количСства Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ своими Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Ρ†Π²Π΅Ρ‚, тСкстурныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ Ρ‚.Π΄. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСкстурированиС, Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ тСкстурныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Π—Π°Π΄Π°Π΄ΠΈΠΌ самый простой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Π£ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ полоТСния Π² Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС ΠΈ Ρ†Π²Π΅Ρ‚: