DirectX 9 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкрд╛рд░реНрдЯрд┐рдХрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреЗрд╡рд▓рдкрдореЗрдВрдЯред рдкрд╛рд░реНрдЯ I

рдпрд╣ рдкреЛрд╕реНрдЯ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧреА, рдФрд░ рдХрд╛рдлреА рдЙрддреНрдкрд╛рджрдХ (рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ 1,000,000 рдХрдг рдЪреБрдкрдЪрд╛рдк рдЦреАрдВрдЪреЗ рдФрд░ рдПрдирд┐рдореЗрдЯреЗрдб рд╣реИрдВ), рдПрдХ рдХрдг рдкреНрд░рдгрд╛рд▓реАред рд╣рдо рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ 9 рдХреЛ рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рджреВрд╕рд░рд╛ рднрд╛рдЧ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реНрд░реЗрдо (рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:




рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдпрд╣ C ++ рдФрд░ DirectX9 рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ XNA, рдпрд╛ GDI, рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВред рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: HTML + JS (рдЬрдм рдореИрдВрдиреЗ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ), C # рдФрд░ GDI, C ++ рдФрд░ GDI, C # рдФрд░ XNAред рдЗрди рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдиреЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рджрд░реНрд╢рди (50,000 рд╕реЗ рдЕрдзрд┐рдХ рдХрдгреЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рддрд┐рдкрд╛рджрди) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИ рд╡рд╣ рдереА рдбрд╛рдпрд░реЗрдХреНрдЯрдбреНрд░рд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╕рдВрдж рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА рдкрд░ рдЧрд┐рд░ рдЧрдИред рдЖрдк OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди D3D рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рдХрд░реАрдм рд╣реИред

0. рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ


рд╕рд┐рд╕реНрдЯрдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдХрдгреЛрдВ рдХреЛ рдЪреЗрддрди рдХрд░реЗрдЧрд╛ред рд╣рдо рдХреБрдЫ рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдХрд╛рдиреВрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛)ред рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВред

рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рдХрдг рдкреНрд░рдгрд╛рд▓реА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрдХ рд╣реЛ, рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рднрд╛рд╡реЛрдВ рдФрд░ рдмрд╛рдж рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдЗрдП рдЬрд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ:
1. рдЙрддреНрдкрд╛рджрдХрддрд╛ред рд╢рд╛рдпрдж C \ C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рддреЗрдЬрд╝реА рд╕реЗ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдФрд░ Direct3D рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдкрд░реНрдпрд╛рдкреНрдд рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВред
2. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рддрд┐рдкрд╛рджрдиред рджрд░рдЕрд╕рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП Direct3D (OpenGL) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрдпрдирд┐рдд рдЙрдореНрдореАрджрд╡рд╛рд░ рдЙрдкрдпреБрдХреНрдд рд╣реИред
3. рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрдиред рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдореЗрдВ рд╢реЗрдбреНрд╕ рдЬреИрд╕реА рдЕрджреНрднреБрдд рдЪреАрдЬ рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВред
4. рд╕реНрдкреНрд░рд╛рдЗрдЯред рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдореЗрдВ, рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИрдВред рдЙрдкрдпреБрдХреНрдд рд╣реИред
5. рдкреНрд░рднрд╛рд╡, рдкреЛрд╕реНрдЯ рдкреНрд░рднрд╛рд╡ред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, shaders рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдЕрдм рдЙрди рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдХрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рди рдЦреЛрдПрдВред рдЦреИрд░, рдореЗрдореЛрд░реА рдХрд╛ рднреА рдзреНрдпрд╛рди рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдкреЙрдЗрдВрдЯ рдСрдл рдПрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред

рд╣рдордиреЗ рд╕рднреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдЕрдм рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рд╣реЛрдВрдЧреЗред

1. Direct3D рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдФрд░ рдПрдХ рдХреИрдорд░рд╛ рдмрдирд╛рдирд╛


рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг \ _ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдПрд╕рдбреАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдПрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рдж рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯ 3 рдбреА 9 рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЪреАрдЬ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
//      WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_VREDRAW|CS_HREDRAW|CS_OWNDC, WndProc, 0, 0, hInstance, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL, L"RenderToTextureClass", NULL}; RegisterClassEx(&wc); //   HWND hMainWnd = CreateWindowW(L"RenderToTextureClass", L"Render to texture", WS_POPUP, 0, 0, Width, Height, NULL, NULL, hInstance, NULL); //   Direct3D LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION); //      D3DPRESENT_PARAMETERS PresentParams; memset(&PresentParams, 0, sizeof(D3DPRESENT_PARAMETERS)); PresentParams.Windowed = TRUE; //     //         . //       D3DSWAPEFFECT_DISCARD. PresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD; LPDIRECT3DDEVICE9 device = NULL; //   d3d->CreateDevice(D3DADAPTER_DEFAULT, //     D3DDEVTYPE_HAL, //    hMainWnd, //      D3DCREATE_HARDWARE_VERTEXPROCESSING, //      &PresentParams, // ,     &device); //   ,     , //  . device->SetRenderState(D3DRS_LIGHTING,FALSE); //      device->SetRenderState(D3DRS_ZENABLE, FALSE); //     


рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдВрдбреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╣реЛрдЧреАред рдЕрдЧрд▓рд╛ Direct3D рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕реЗ рд╣рдо рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдЧрдгрдирд╛рдПрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ (рдЗрд╕рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, 4 рдХреЛрд░, рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рджрд░реНрдЬрдиреЛрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рддреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░реАрд╕ рдФрд░ рдХреИрдорд░реЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ 3D рдбреЗрдЯрд╛ рдХреЛ 2D рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреИрдорд░рд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХрд╣рд╛рдБ рджреЗрдЦрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╕рд░рд▓реАрдХрд░рдг, рдСрд░реНрдереЛрдЧреЛрдирд▓ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдХрдг рд╕рдкрд╛рдЯ рдмрд┐рдВрджреБ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреА рд╡рд┐рд╢реЗрд╖ рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреИрдорд░реЗ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрд░реНрдереЛрдЧреЛрдирд▓ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореЗрдВ, Z рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред

 //   D3DXMATRIX matrixView; D3DXMATRIX matrixProjection; //   D3DXMatrixLookAtLH( &matrixView, &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,0,1), &D3DXVECTOR3(0,1,0)); //   D3DXMatrixOrthoOffCenterLH(&matrixProjection, 0, Width, Height, 0, 0, 255); //      device->SetTransform(D3DTS_VIEW,&matrixView); device->SetTransform(D3DTS_PROJECTION,&matrixProjection); 


2. рдЙрдирдХреЗ рд▓рд┐рдП рдХрдг рдФрд░ рдПрдХ рдмрдлрд░ рдмрдирд╛рдирд╛


рд╣рдордиреЗ рдкреВрд░реА рддреИрдпрд╛рд░реА рдХреА, рдпрд╣ рдХреЗрд╡рд▓ рдХрдг рдмрдирд╛рдиреЗ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

 struct VertexData { float x,y,z; }; struct Particle { float x, y, vx, vy; }; std::deque<Particle> particles; 

рд╡рд░реНрдЯреЗрдХреНрд╕рдбрд╛рдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреАрдкреАрдпреВ (рд╡рд░реНрдЯреЗрдХреНрд╕ рдмрдлрд░) рдореЗрдВ рдХрдг рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрдг рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрд╕рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХрд╣рд╛рдБ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред
рдХрдг рд╣рдорд╛рд░реЗ рдХрдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛, рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЧрддрд┐ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдХрдгреЛрдВ рдореЗрдВ , рд╣рдорд╛рд░реЗ рд╕рднреА рдХрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреАред рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдг рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 //      srand(clock()); Particle tmp; for( int i = 0; i<particleCount; ++i ) { tmp.x = rand()%Width; tmp.y = rand()%Height; particles.push_back( tmp ); } LPDIRECT3DVERTEXBUFFER9 pVertexObject = NULL; LPDIRECT3DVERTEXDECLARATION9 vertexDecl = NULL; size_t count = particles.size(); VertexData *vertexData = new VertexData[count]; for(size_t i=0; i<count; ++i) { vertexData[i].x = particles[i].x; vertexData[i].y = particles[i].y; vertexData[i].z = 0.f; vertexData[i].u = 0; vertexData[i].v = 0; } void *pVertexBuffer = NULL; //    device->CreateVertexBuffer( count*sizeof(VertexData), //    D3DUSAGE_WRITEONLY, //  GPU,         D3DFVF_XYZ, //     XYZ D3DPOOL_DEFAULT, //      &pVertexObject, //   ,     NULL); //  .  NULL //  ,       pVertexObject->Lock(0, count*sizeof(VertexData), &pVertexBuffer, 0); //     memcpy(pVertexBuffer, vertexData, count*sizeof(VertexData)); pVertexObject->Unlock(); delete[] vertexData; vertexData = nullptr; //      //    3 float,   0- ,    D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; //      device->CreateVertexDeclaration(decl, &vertexDecl); 


рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛ред
рдмрдлрд░ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдбреА 3 рдбреАрдпреВрдПрд╕рдПрдЬреАрдИрдПрдЬрдбрдмреНрд▓реВрдЖрд░рдЖрдИ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреАрдкреАрдпреВ рдХреЛ рдмрддрд╛рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдмрдлрд░ рд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝реЗрдВрдЧреЗред рдпрд╣ GPU рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдПрдЧрд╛ред
рд╡рд░реНрдЯреЗрдХреНрдбреЗрдХреНрд▓реЗрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рд╢реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╢реЗрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдП рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

3. рдХрдг рдкреНрд░рддрд┐рдкрд╛рджрди


рдЕрдм рдХрдгреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 //    device->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); //    device->SetStreamSource(0, pVertexObject, 0, sizeof(VertexData)); // ,     device->SetVertexDeclaration(vertexDecl); device->BeginScene(); //  device->DrawPrimitive(D3DPRIMITIVETYPE::D3DPT_POINTLIST, //    -  0, //   0-  particles.size()); //   ,     device->EndScene(); 

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ: рдбреНрд░рд╛рдЗрдВрдЧ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдмрд╛рд░ рдмрд┐рдЧрд┐рдирд╕реЗрди () рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдВрдд рдХреЗ рдмрд╛рдж рдПрдВрдбрд╕реНрдХреАрди () ред

рдПрдиреАрдореЗрд╢рди


рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 //    POINT pos; GetCursorPos(&pos); RECT rc; GetClientRect(hMainWnd, &rc); ScreenToClient(hMainWnd, &pos); const int mx = pos.x; const int my = pos.y; const auto size = particles.size(); float force; float distSquare; VertexData *pVertexBuffer; //   ,   pVertexObject->Lock(0, 0, (void**)&pVertexBuffer, D3DLOCK_DISCARD); for(int i = 0; i < size; ++i ) { auto &x = particles[i].x; auto &y = particles[i].y; distSquare= pow( x - mx, 2 ) + pow( y - my, 2 ); if( dist < 20 ) { force = 0; } else { force = G / distSquare; } const float xForce = (mx - x) * force; const float yForce = (my - y) * force; particles[i].vx *= Resistance; particles[i].vy *= Resistance; particles[i].vx += xForce; particles[i].vy += yForce; x+= particles[i].vx; y+= particles[i].vy; if( x > Width ) x -= Width; else if( x < 0 ) x += Width; if( y > Height ) y -= Height; else if( y < 0 ) y += Height; pVertexBuffer[i].x = particles[i].x; pVertexBuffer[i].y = particles[i].y; } pVertexObject->Unlock(); 


рдмрдлрд╝рд░ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдбреА 3 рдбреАрдПрд▓рдУрдХреЗ_рдбрд┐рд╕рдХрд╛рд░реНрдб рдлреНрд▓реИрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдпрд╣ рдЬреАрдкреАрдпреВ рдХреЛ рдкреБрд░рд╛рдиреЗ рдмрдлрд░ рд╕реЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХрдгреЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╡реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред

рдЗрд╕ рдкрд░, рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрдгреЛрдВ рдХреА рдмрдирд╛рд╡рдЯ, рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕, рд╕рд╛рде рд╣реА рдкреНрд░рднрд╛рд╡ рдФрд░ рдмрд╛рдж рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рдбреЗрдореЛ рдФрд░ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

Source: https://habr.com/ru/post/In149932/


All Articles