рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдпрд╣ рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА-рдЕрднреА рдбреЗрдореЛрд╕рд┐рди рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рд▓реЗрдЦ рдХреЛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдКрдВрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛, рдпрд╣ рд▓реЗрдЦ OpenGL, DirectX рдФрд░ рд▓рд╛рдЦреЛрдВ рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдореЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЕрдЪреНрдЫреЗ рд▓реЗрдЦ рд╣реИрдВ, рдореИрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рдХрд┐рд╕ рдкрд░ рд▓рд┐рдЦрдирд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдбреЗрдореЛ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред
рд╣рдо рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2008 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдХреБрдЫ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдмрд┐рдВрджреБ
рдЖрдЗрдП рдкрд╣рд▓реЗ Images.h рдореЙрдбреНрдпреВрд▓ рдореЗрдВ TImage рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рдпрд╣ рдЫрд╡рд┐ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛:
struct TImage { int width; int height; unsigned char *pBitMap; };
Images.h, Images.c #pragma once struct TImage { int width; int height; unsigned char *pBitMap; }; void imgClearRGBA(struct TImage Image, unsigned char R, unsigned char G, unsigned char B, unsigned char A ); void imgClear(struct TImage Image, unsigned long color );
#include "Images.h" void imgClearRGBA(struct TImage Image, unsigned char R, unsigned char G, unsigned char B, unsigned char A ) { int i; for(i=0;i!=Image.width*Image.height*4;i=i+4) { Image.pBitMap[ i ] = B; Image.pBitMap[ i+1 ] = G; Image.pBitMap[ i+2 ] = R; Image.pBitMap[ i+3 ] = A; } } void imgClear(struct TImage Image, unsigned long color ) { unsigned long *pBitMap; int i; pBitMap = (unsigned long*)Image.pBitMap; for(i=0;i!=Image.width*Image.height;i++) { pBitMap[ i ] = color; } }
рдФрд░ рд╕реАрдзреЗ рдЫрд╡рд┐ рдХрд╛ рдмрд┐рдЯрдореИрдк рдЙрд╕ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ pBitMap рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЪреВрдВрдХрд┐ рд╣рдо рдУрдкрдирдЬреАрдПрд▓ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╕реЗрдЯрдкрд┐рдХреНрд╕рд▓ () рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рдХреА рд╕реБрд╕реНрддреА рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред
WinApi StretchDIBits () рдлрд╝рдВрдХреНрд╢рди рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рд╕рд╛рде рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рд╣реИрдВрдбрд▓ рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рд╕рд░рдгреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ:
void DrawBuffer(struct TImage Image) { BITMAPINFO BitMapInfo; DC=GetDC(Wnd); BitMapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); BitMapInfo.bmiHeader.biWidth=Image.width; BitMapInfo.bmiHeader.biHeight=Image.height; BitMapInfo.bmiHeader.biPlanes=1; BitMapInfo.bmiHeader.biBitCount=32; BitMapInfo.bmiHeader.biCompression=BI_RGB; StretchDIBits( DC, 0, 0, Image.width*PIXEL_SIZE, Image.height*PIXEL_SIZE, 0, 0, Image.width, Image.height, Image.pBitMap, &BitMapInfo, DIB_RGB_COLORS, SRCCOPY ); ReleaseDC(Wnd, DC); }
SystemUtils.h, SystemUtils.c #pragma once #define PIXEL_SIZE 1 #define DISP_WIDTH 640 #define DISP_HEIGHT 480 void DrawBuffer(struct TImage Image); #include "windows.h" void SetHWND( HWND _Wnd );
#include "windows.h" #include "Images.h" #include "SystemUtils.h" static HWND Wnd; void SetHWND( HWND _Wnd ) { Wnd = _Wnd; } void DrawBuffer(struct TImage Image) { BITMAPINFO BitMapInfo; HDC DC; DC = GetDC(Wnd); BitMapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
рдХреНрд▓рд╛рд╕рд┐рдХ рд▓реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
while(1) { ; ; Pause(); }
рд▓реЗрдХрд┐рди рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЦрд┐рдбрд╝рдХреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрдореЗ рд╣реБрдП рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдард╣рд░рд╛рд╡ () рдХрд╣реЗрдВрдЧреЗ, рдЗрд╕рдореЗрдВ рд╡рд┐рдВрдбреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ?
рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдореЛ рдореЗрдВ рд╡рд┐рд╢рд╛рд▓ рдФрд░ рдЕрдирд╛рдбрд╝реА рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд┐рд╕реЗ рд╣реИ (рдореИрдВ рдЧреЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред
Pose.c рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
Pause.h, Pause.c #pragma once #include "windows.h" void SetMsg( MSG _Msg ); void SetPause( DWORD value ); void Pause(void);
рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдкреНрд░реЗрдореА рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
main.c #include "windows.h" #include "windowsx.h" #include "Demo.h" #include "SystemUtils.h" #include "Pause.h" static HWND Wnd; static MSG Msg; static WNDCLASS wndclass; static POINT MouseInWin; static RECT WinRect; static int MoveWin = 0;
рдФрд░ Demo.c рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдБ, рдЬрд╣рд╛рдБ рдбреЗрдореЛ рд╕реНрд╡рдпрдВ рд╣реЛрдЧрд╛:
рдбреЗрдореЛ.рдПрдЪ, рдбреЗрдореЛ void StartDemo(void);
#include "Pause.h" #include "SystemUtils.h" #include "Images.h" #include "math.h" static unsigned char BitMap[640*480*4];
рдЕрдм рддреБрдо рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реЛ!

рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╕рдм рдХреБрдЫ рд╕рдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдмрдлрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ:
void StartDemo(void) { SetPause(16);
рдПрдХ рдмрд┐рдВрджреБ рдбреНрд░рд╛ рдХрд░реЗрдВ

рдЪрд▓реЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ x = 1, y = 1 рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рд▓ рдмрд┐рдВрджреБ рдЦреАрдВрдЪрдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

рдЬрд╣рд╛рдВ рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ 4 рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдпрд╛ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдВрдмреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рд╡рд╣ рдЧреНрд░реЗ рдЕрд▓реНрдлрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЫреВрдПрдВрдЧреЗред
рдЕрдм рд╣рдореЗрдВ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (x + y * disp. рдЙрдкрд▓рдмреНрдзрддрд╛) << 2 рд╕рд░рдгреА рдореЗрдВ рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдЬреЛрдбрд╝реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред (<< 2 рд╕рд┐рд░реНрдл 4 рдЧреБрдгрд╛ рдХреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреБрдгрд╛ рд╣реИ)
void StartDemo(void) { const int x=1, y=1; SetPause(16);
рдЕрдм рдЬрдм рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рд▓ рдмрд┐рдВрджреБ рджреЗрдЦрддреЗ рд╣реИрдВред
рдПрдХ рдврд╛рд▓ рдмрдирд╛рдПрдВ

рдЕрдм рдПрдХ рдврд╛рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдЫреЛрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рдгреА рдХреЗ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗ,
рдФрд░ рд╕реВрддреНрд░ рдорд╛рди = X / (Max_X / Max_Value) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдврд╛рд▓ рдмрдирд╛рдПрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд╛рд▓ рдФрд░ рдиреАрд▓реЗ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЕрдкрдирд╛ рдПрдХ рд╕реБрдВрджрд░ рдЪрд┐рддреНрд░ рджреЗрдВред
void StartDemo(void) { int x,y,line; SetPause(16);
рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд▓рд╛рдЬреНрдорд╛

рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд▓рд╛рдЬреНрдорд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рддрдХ рдореИрдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╣ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдк () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдЗрди рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрдИ рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИред
Demo.c #include "Pause.h" #include "SystemUtils.h" #include "Images.h" #include "math.h" static unsigned char BitMap[640*480*4];
рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрд░реЛрдд:
рдЦрд╛рд▓реА рдЦрд┐рдбрд╝рдХреАрдмрд┐рдВрджреБрдврд╛рд▓рдкреНрд▓рд╛рдЬреНрдорд╛рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкреНрд▓рд╛рдЬреНрдорд╛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!