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, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ. Π’ΠΎ Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ². Π’ΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ. ΠΠ΅ΡΡΠΈΠ½Ρ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΡΠ²Π΅Ρ, ΡΠ΅ΠΊΡΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ Ρ.Π΄. ΠΠ΅ΡΡΠΈΠ½Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ. ΠΠ°Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ Π²Π΅ΡΡΠΈΠ½Ρ. Π£ Π²Π΅ΡΡΠΈΠ½Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π±ΡΠ΄ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΡΡ ΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈ ΡΠ²Π΅Ρ: