рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛, рднрд╛рдЧ 1

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдпрд╣ рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА-рдЕрднреА рдбреЗрдореЛрд╕рд┐рди рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рд▓реЗрдЦ рдХреЛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдКрдВрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛, рдпрд╣ рд▓реЗрдЦ 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 ); 

 /* Images */ #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 ); 

 /* SystemUtils */ #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);//   BitMapInfo.bmiHeader.biWidth = Image.width;//   BitMapInfo.bmiHeader.biHeight = -Image.height;//  ,        BitMapInfo.bmiHeader.biPlanes = 1;//   -  1 BitMapInfo.bmiHeader.biBitCount = 32;// -    BitMapInfo.bmiHeader.biCompression = BI_RGB;//  BitMapInfo.bmiHeader.biSizeImage = Image.width*Image.height*32/8;//   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); } 



рдХреНрд▓рд╛рд╕рд┐рдХ рд▓реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 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); 

 /*       */ //  timeGetTime   GetTickCount #define _USE_TIMEGETTIME #include "windows.h" #ifdef _USE_TIMEGETTIME #include "mmsystem.h" #pragma comment (lib,"winmm") #endif static MSG Msg; DWORD Time; DWORD OldTime; void SetMsg( MSG _Msg ) { Msg = _Msg; } void SetPause( DWORD value ) { if(value == 0)value = 1; Time = value; #ifdef _USE_TIMEGETTIME timeBeginPeriod(1);//    timeGetTime OldTime = timeGetTime()+Time; #else OldTime = GetTickCount()+Time; #endif } void Pause(void) { //   while (PeekMessage(&Msg, 0, 0, 0, PM_NOREMOVE) != 0 ) { if (GetMessage(&Msg, 0, 0, 0) ) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } #ifdef _USE_TIMEGETTIME while( timeGetTime()<OldTime)Sleep(1);//       OldTime = timeGetTime()+Time; #else while( GetTickCount()<OldTime)Sleep(1);//       OldTime = GetTickCount()+Time; #endif } 



рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдкреНрд░реЗрдореА рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
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; /*    , ..     Windows          "".  -    */ static POINT MouseInWin; static RECT WinRect; static int MoveWin = 0; // window procedure LONG WINAPI WndProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { LONG lRet = 1; POINT point; switch (uMsg) { case WM_LBUTTONDOWN: MoveWin = 1;//move window=true GetWindowRect( Wnd, &WinRect ); point.x = GET_X_LPARAM(lParam); point.y = GET_Y_LPARAM(lParam); ClientToScreen( Wnd, (LPPOINT)&point ); MouseInWin.x = point.x-WinRect.left; MouseInWin.y = point.y-WinRect.top; SetCapture(Wnd); break; case WM_MOUSEMOVE: GetCursorPos( (LPPOINT)&point ); if(MoveWin)SetWindowPos( Wnd,0, point.x-MouseInWin.x, point.y-MouseInWin.y, WinRect.right-WinRect.left, WinRect.bottom-WinRect.top, 0); break; case WM_LBUTTONUP: MoveWin = 0;//move window=false ReleaseCapture(); break; case WM_RBUTTONUP: PostMessage(Wnd, WM_DESTROY, 0, 0); break; case WM_DESTROY: PostQuitMessage (0); ExitProcess( 0 ); break; default: lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); break; } return lRet; } void CreateWin( HINSTANCE hInstance, HWND *Wnd) { const int ClientWidth = DISP_WIDTH*PIXEL_SIZE;//resolution * pixel size const int ClientHeight = DISP_HEIGHT*PIXEL_SIZE; RECT Rect = {0,0,ClientWidth,ClientHeight}; wndclass.style = CS_BYTEALIGNCLIENT; wndclass.lpfnWndProc = &WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = 0; wndclass.hIcon = LoadIcon(0, L"idi_Application"); wndclass.hCursor = LoadCursor (0,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wndclass.lpszMenuName = L""; wndclass.lpszClassName = L"MainWindow"; RegisterClass(&wndclass); *Wnd=CreateWindow( L"MainWindow", L"Demo", WS_POPUPWINDOW, // CW_USEDEFAULT,//x CW_USEDEFAULT,//y ClientWidth,//width ClientHeight,//height 0,// parent win 0,//menu hInstance, 0//other ); GetWindowRect(*Wnd,&Rect); Rect.bottom = Rect.left+ClientHeight;//ClientHeight Rect.right = Rect.top+ClientWidth;//ClientWidth AdjustWindowRect(&Rect, GetWindowLong(*Wnd,GWL_STYLE) ,0); SetWindowPos(*Wnd,0,Rect.left,Rect.top, Rect.right-Rect.left, Rect.bottom-Rect.top,0); ShowWindow(*Wnd, SW_SHOW ); UpdateWindow (*Wnd); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { CreateWin(hInstance, &Wnd);//  SetHWND(Wnd); SetMsg(Msg); StartDemo(); return 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];//   static struct TImage Disp = {640,480,BitMap};// void StartDemo(void) { SetPause(16);//fps ~= 60 while(1) { // AARRGGBB imgClear(Disp,0xFF000000);//  DrawBuffer(Disp);//   Pause(); } } 


рдЕрдм рддреБрдо рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реЛ!

рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╕рдм рдХреБрдЫ рд╕рдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдмрдлрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ:
 void StartDemo(void) { SetPause(16);//fps ~= 60 while(1) { // AARRGGBB imgClear(Disp,0xFF000000);//  DrawBuffer(Disp);//   Pause(); } } 


рдПрдХ рдмрд┐рдВрджреБ рдбреНрд░рд╛ рдХрд░реЗрдВ



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

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


рд╡рд╣ рдЧреНрд░реЗ рдЕрд▓реНрдлрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЫреВрдПрдВрдЧреЗред

рдЕрдм рд╣рдореЗрдВ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (x + y * disp. рдЙрдкрд▓рдмреНрдзрддрд╛) << 2 рд╕рд░рдгреА рдореЗрдВ рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдЬреЛрдбрд╝реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред (<< 2 рд╕рд┐рд░реНрдл 4 рдЧреБрдгрд╛ рдХреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреБрдгрд╛ рд╣реИ)
 void StartDemo(void) { const int x=1, y=1; SetPause(16);//fps ~= 60 while(1) { // AARRGGBB imgClear(Disp,0xFF000000);//  Disp.pBitMap[( (x + y*Disp.width)<<2 )+2] = 255;//   DrawBuffer(Disp);//   Pause(); } } 

рдЕрдм рдЬрдм рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рд▓ рдмрд┐рдВрджреБ рджреЗрдЦрддреЗ рд╣реИрдВред

рдПрдХ рдврд╛рд▓ рдмрдирд╛рдПрдВ



рдЕрдм рдПрдХ рдврд╛рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдЫреЛрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рдгреА рдХреЗ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗ,
рдФрд░ рд╕реВрддреНрд░ рдорд╛рди = X / (Max_X / Max_Value) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдврд╛рд▓ рдмрдирд╛рдПрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд╛рд▓ рдФрд░ рдиреАрд▓реЗ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЕрдкрдирд╛ рдПрдХ рд╕реБрдВрджрд░ рдЪрд┐рддреНрд░ рджреЗрдВред
 void StartDemo(void) { int x,y,line; SetPause(16);//fps ~= 60 imgClear(Disp,0xFF000000);//  while(1) { for(y=0;y!=Disp.height;y++) { line = y*Disp.width; for(x=0;x!=Disp.width;x++) { Disp.pBitMap[( (x + line)<<2 )+0] = (unsigned char)( y/(Disp.height/256.0) );//B Disp.pBitMap[( (x + line)<<2 )+2] = (unsigned char)( x/(Disp.width/256.0) );//R } } DrawBuffer(Disp);//   Pause(); } } 

рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд▓рд╛рдЬреНрдорд╛



рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд▓рд╛рдЬреНрдорд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рддрдХ рдореИрдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╣ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдк () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдЗрди рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрдИ рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИред
Demo.c
 #include "Pause.h" #include "SystemUtils.h" #include "Images.h" #include "math.h" static unsigned char BitMap[640*480*4];//   static struct TImage Disp = {640,480,BitMap};// static unsigned char SinT[256];//  static void CreatetSinT(void) { int i; for(i=0;i!=256;i++) { SinT[i] = (int)( sin( (i*3.14*2.0)/256.0) *128+128 ); } } void StartDemo(void) { int x,y,line; int tx1=0,ty1=0,tx2=0,ty2=0,tx3=0,ty3=0; int px1,py1,px2,py2,px3,py3; SetPause(16);//fps ~= 60 CreatetSinT(); imgClear(Disp,0xFF000000);//  while(1) { py1=ty1; py2=ty2; py3=ty3; for(y=0;y!=Disp.height;y++) { line = y*Disp.width; px1=tx1; px2=tx2; px3=tx3; for(x=0;x!=Disp.width;x++) { px1=px1+1; px2=px2+1; px3=px3+1; Disp.pBitMap[( (x + line)<<2 )+2] = (SinT[ px1&255 ]+SinT[ py1&255 ])>>1;//R Disp.pBitMap[( (x + line)<<2 )+1] = (SinT[ px2&255 ]+SinT[ py2&255 ])>>1;//G Disp.pBitMap[( (x + line)<<2 )+0] = (SinT[ px3&255 ]+SinT[ (py3+63)&255 ])>>1;//B } py1=py1+1; py2=py2+1; py3=py3+1; } tx1=tx1+1; ty1=ty1+1; tx2=tx2+2; ty2=ty2+2; tx3=ty3+3; ty3=ty3+3; DrawBuffer(Disp);//   Pause(); } } 


рдбрд╛рдЙрдирд▓реЛрдб рд╕реНрд░реЛрдд:
рдЦрд╛рд▓реА рдЦрд┐рдбрд╝рдХреА
рдмрд┐рдВрджреБ
рдврд╛рд▓
рдкреНрд▓рд╛рдЬреНрдорд╛
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкреНрд▓рд╛рдЬреНрдорд╛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles