¿ø°ú »ç°¢ÇüÀ» ±×·Áº¸ÀÚ. ½ÇÇà ȸéÀÌ´Ù. »ç°¢ÇüÀ» ±×¸®°í ¿ø µÎ°³°¡ ¿·À¸·Î À̵¿ÇÏ´Â ¸ð½ÀÀÌ´Ù. »ç°¢ÇüÀº SDL_RenderDrawRect·Î SDL API·Î ±×¸®°í ¿øÀº ÀÎÅͳݿ¡¼ °¡Á®¿Â ÇÔ¼ö·Î ±×·È´Ù. DrawCircleÀº ¼±À¸·Î ±×¸®´Â ¿øÀÌ´Ù. DrawCircleFillÀº ä¿öÁø ¿øÀÌ´Ù. ¼³¸íÀº º°µµ·Î ÇÏÁö ¾Ê°í Äڵ常 ÷ºÎÇÑ´Ù. ¿¹Á¦¿Í SDL ¶óÀ̺귯¸®¸¦ °°ÀÌ ¹¾î¼ ¿Ã¸°´Ù. #include <SDL.h>
#include <stdio.h> void Draw(SDL_Renderer *renderer); int main( int argc, char *argv[] ) { bool success = true; if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() ); return -1; } SDL_Window *window = SDL_CreateWindow( "Quadtree", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 1024, 768, 0 ); SDL_Renderer *renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED ); bool running = true; SDL_Event event; float mouseX = 0; float mouseY = 0; int lastAddIndex = 0; while ( running ) { while ( SDL_PollEvent( &event ) ) { mouseX = (float)event.button.x; mouseY = (float)event.button.y; if ( event.type == SDL_QUIT ) { running = false; } else if ( event.type == SDL_MOUSEBUTTONDOWN ) { if(event.button.button == SDL_BUTTON_LEFT) { } else if(event.button.button == SDL_BUTTON_RIGHT) { } } else if ( event.type == SDL_MOUSEBUTTONUP ) { if(event.button.button == SDL_BUTTON_LEFT) { } else if(event.button.button == SDL_BUTTON_RIGHT) { } } else if(event.type == SDL_MOUSEMOTION) { if(event.motion.state & SDL_BUTTON_LMASK) { } else if(event.motion.state & SDL_BUTTON_RMASK) { } } } Draw(renderer); } SDL_DestroyRenderer( renderer ); SDL_DestroyWindow( window ); return 0; } void DrawCircle(SDL_Renderer * renderer, int32_t centreX, int32_t centreY, int32_t radius) { const int32_t diameter = (radius * 2); int32_t x = (radius - 1); int32_t y = 0; int32_t tx = 1; int32_t ty = 1; int32_t error = (tx - diameter); while (x >= y) { // Each of the following renders an octant of the circle SDL_RenderDrawPoint(renderer, centreX + x, centreY - y); SDL_RenderDrawPoint(renderer, centreX + x, centreY + y); SDL_RenderDrawPoint(renderer, centreX - x, centreY - y); SDL_RenderDrawPoint(renderer, centreX - x, centreY + y); SDL_RenderDrawPoint(renderer, centreX + y, centreY - x); SDL_RenderDrawPoint(renderer, centreX + y, centreY + x); SDL_RenderDrawPoint(renderer, centreX - y, centreY - x); SDL_RenderDrawPoint(renderer, centreX - y, centreY + x); if (error <= 0) { ++y; error += ty; ty += 2; } if (error > 0) { --x; tx += 2; error += (tx - diameter); } } } void DrawCircleFill(SDL_Renderer *renderer, int x, int y, int radius) { for (int w = 0; w < radius * 2; w++) { for (int h = 0; h < radius * 2; h++) { int dx = radius - w; // horizontal offset int dy = radius - h; // vertical offset if ((dx*dx + dy*dy) <= (radius * radius)) { SDL_RenderDrawPoint(renderer, x + dx, y + dy); } } } } int x1 = 0; int x2 = 600; int inc1 = 1; int inc2 = -1; void Draw(SDL_Renderer *renderer) { /** Log */ printf("draw...\r\n"); /** Rendering */ SDL_SetRenderDrawColor(renderer, 48, 10, 36, 255); SDL_RenderClear( renderer ); SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_Rect rect; rect.x = 0; rect.y = 0; rect.w = 200; rect.h = 600; SDL_RenderDrawRect( renderer, &rect ); DrawCircle(renderer, x1, 300, 10); DrawCircleFill(renderer, x2, 500, 10); x1 += inc1; x2 += inc2; if(x1 >= 600) inc1 = -1; if(x1 <= 0) inc1 = 1; if(x2 >= 600) inc2 = -1; if(x2 <= 0) inc2 = 1; SDL_RenderPresent(renderer); SDL_Delay( 8 ); } ÇÁ·ÎÁ§Æ® ´Ù¿î·Îµå : sdl_demo.zip |