• ·Î±×ÀÎ ÇÔ ÇØº¸²ô³ª?

  • Sarangnamu.net June 17, 2003
    Home Login Study Open Project Gallery Free board Google Code
    Direct X (Direct Draw2)


    °ÔÀÓ ·çÇÁ ÄÚµù

    ±âº» ÇÁ·Î±×·¥¿¡ ¡¸°ÔÀÓ ·çÇÁ¡¹¸¦ Ãß°¡ÇÕ´Ï´Ù.
    °ÔÀÓÀº ±âº»ÀûÀ¸·Î ¡¸¹Ý¿µ±¸ÀÎ ·çÇÁ(?)¡¹·Î ±× 󸮸¦ ½ÇÇàÇÏ´Â °ÍÀÌ º¸ÆíÈ­ µÇ¾î ÀÖ½À´Ï´Ù.
    À§¿Í °°ÀÌ ¿©·¯ °¡Áö 󸮸¦ ·çÇÁ ¾È¿¡¼­ ½Ç½ÃÇÕ´Ï´Ù.
    DirectX ÇÁ·Î±×·¥ÀÇ °æ¿ì´Â ±×°ÍÀ» µ¿ÀÛ½ÃŰ´Â ±â±â¸¶´Ù ¼º´ÉÀÌ ´Ù¸¥ PC·Î µ¿ÀÛÇϹǷÎ
    ¾î¶² PC³ª °°Àº ½ºÇǵå·Î ·çÇÁ Çϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

    PC¿¡ µû¶ó¼­ ij¸¯ÅͰ¡ »¡¸® ¿òÁ÷À̰í ÀûÀÇ ¿òÁ÷ÀÓµµ »¡¶óÁ® °ÔÀÓÀ» ÇÒ ¼ö ¾ø°Ô
    µÇ´Â Çö»óÀÌ ³ªÅ¸³³´Ï´Ù.
    ¹Ý´ë·Î ´ÊÀº PC¶ó¸é¡¤¡¤¡¤´ÊÀº °ÔÀÓÀÌ µË´Ï´Ù.
    ±×·¯ÇÑ ±âÁ¾°£ÀÇ Â÷À̸¦ °¡´ÉÇÑ ÇÑ ¾ïÁ¦ÇÏ´Â °ÍÀº ´ç¿¬È÷ ÇÊ¿äÇÕ´Ï´Ù.

    60ºÐÀÇ 1 ·çÇÁ
    ¡¸60ºÐÀÇ 1¡¹À̶ó°í ÇÏ´Â ·çÇÁ°¡ °ÔÀÓ¿¡¼­´Â ÀÚÁÖ »ç¿ëµÇ°í ÀÖÀ¸¹Ç·Î ¿©±â¿¡¼­µµ ±× ½ºÇǵå·Î ·çÇÁ Çϵµ·Ï ÇÕ´Ï´Ù.
    ¡¸60ºÐÀÇ 1¡¹À̶õ 60ºÐÀÇ 1ÃÊ¡¤¡¤¡¤1ÃÊ´Â ¡¸1000 ¹Ð¸® ¼¼ÄÁµå¡¹À̹ǷΠ¡¸16.66666 ¹Ð¸® ¼¼ÄÁµå¡¹¶ó°í ÇÏ´Â ±Ø´ÜÀÇ °£°ÝÀ¸·Î ·çÇÁ ÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù.
    (1Ãʰ£¿¡ 60ȸ ·çÇÁ ÇÏ´Â 60ȸÀÇ È­¸éÀÌ ¹¦È­ µÈ´Ù´Â ÀǹÌ)
    ÄÄÇ»ÅÍ´Â ±²ÀåÈ÷ °í¼ÓÀ¸·Î °è»êÇϹǷΠ´ÙÀ½ ·çÇÁ 󸮱îÁö ½Ã°£ ¡¸16.66666 ¹Ð¸® ¼¼ÄÁµå¡¹ÀÇ »çÀÌ¿¡ ¿©·¯ °¡Áö ÀϵéÀ» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.


    ÇÁ·Î±×·¥

    ±×·³ ±× ·çÇÁ´Â ¾î¶»°Ô ÇÁ·Î±×·¥ ÇÏ´Â °ÍÀϱî?
    À̰Ϳ¡´Â ¡¸Á¤¹Ðµµ°¡ ³ôÀº ³»ºÎ ½Ã°è¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    ³»ºÎ ½Ã°èÀÇ ½Ã°£À» ÃëµæÇÒ ¼ö ÀÖ´Â ÇÔ¼ö°¡ ÀÖÀ¸¹Ç·Î °£´ÜÇÑ Ã³¸®ÀÔ´Ï´Ù.

    void     loop(void)
    {
        if(timeGetTime() <prev_time) prev_time = timeGetTime();
        double t = fabs(timeGetTime() - prev_time);
        if(t >= MSPF)
        {
            do
            {
                t-=MSPF;
                prev_time+=MSPF;
                //󸮸¦ ±âÀÔÇÑ´Ù.
            }
            while(t>=MSPF);
        }
    }

    ºñ°í
    -prev_time
    -MSPF ¸ÅÅ©·ÎÀÔ´Ï´Ù.¡¸16.66666¡¹ÀÇ °ªÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.
    ¿ì¼± ó¸®ÀÇ ½ÃÀÛ¿¡¼­ ¡¸timeGetTime ÇÔ¼ö¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    À̰ÍÀº PC ±âµ¿ºÎÅÍ °æ°ú½Ã°£À» »ó´çÈ÷ Á¤¹Ðµµ·Î ÃëµæÇÒ ¼ö ÀÖ´Â ÇÔ¼öÀÔ´Ï´Ù(¹Ð¸® ¼¼ÄÁµå ´ÜÀ§)

    if(timeGetTime() < prev_time)prev_time = timeGetTime();

    ¡¸timeGetTime ÇÔ¼ö¡¹·Î ±âµ¿ºÎÅÍÀÇ °æ°ú½Ã°£À» ÃëµæÇØ ¡¸prev_time º¯¼ö¡¹¿Í ºñ±³ÇÕ´Ï´Ù.
    (prev_time¿¡´Â ÀüȸÀÇ ·çÇÁ ½ÃÀÛ ½Ã°£ÀÌ º¸°üµË´Ï´Ù.)
    À§ÀÇ Ã³¸®´Â ÃʱâÈ­ÀÔ´Ï´Ù.
    ±âº»ÀûÀ¸·Î ¡¸prev_time º¯¼ö¡¹ÀÇ °ªÀÌ ¡¸timeGetTime ÇÔ¼ö¡¹·Î ÃëµæÇÏ´Â °æ°ú½Ã°£º¸´Ù ºü¸¦ ¼ö´Â ¾øÀ¸¹Ç·Î. . .
    ¡¸prev_time º¯¼ö¡¹°ªÀÇ °Ý³³ ÇѰ谡 µÇ¸é ÀÚ¸®¼ö ³ÑħÀÌ ¹ß»ýÇØ °ªÀÌ ¿¹±âÄ¡ ¾ÊÀº ÇüŰ¡ µÇ¾î ³¡³»¹Ç·Î.
    ±×·¸°Ô µÇ¾úÀ» °æ¿ì¿¡ ¡¸prev_time¡¹ÀÇ °ªÀ» ¼öÁ¤ÇÕ´Ï´Ù.

    double t = fabs(timeGetTime() - prev_time);

    º¯¼ö t¿¡ ¡¸ÇöÀç ½Ã°¢(±âµ¿ºÎÅÍ °æ°ú½Ã°£)¡¹°ú¡¸ÀüȸÀÇ ·çÇÁ ½Ã°£¡¹À» »¬¼ÀÀ» ÇÕ´Ï´Ù.
    À̰ÍÀ¸·Î ÇöÀ硤¡¤¡¤ÀüÀÇ ·çÇÁºÎÅÍ ¾ó¸¶³ª ½Ã°£ÀÌ °æ°úÇß´ÂÁö ¾Ë ¼ö ÀÖ½À´Ï´Ù.

    fabs ÇÔ¼ö´Â ¼Ò¼öÁ¡ °ªÀÇ Àý´ë °ªÀ» ¿ä±¸ÇÏ´Â ÇÔ¼ö
    À§¿¡¼­ °æ°ú½Ã°£À» ¾Ë ¼ö ÀÖ¾úÀ¸¹Ç·Î ´ÙÀ½ÀÇ if¹®À¸·Î ºÐ±âÇÕ´Ï´Ù.

    if(t>=MSPF)
    {

    }

    MSPF¿¡´Â 1ȸÀÇ ·çÇÁ·Î ÁÖ¾îÁö´Â ÃÖÀúÀÇ Ã³¸® ½Ã°£ÀÌ ¸ÅÅ©·Î¿¡ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.
    ±×°Í°ú °æ°ú½Ã°£À» ºñ±³ÇÔÀ¸·Î °ÔÀÓÀÇ Ã³¸®¸¦ ½ÇÇàÇÏ´ÂÁö¸¦ ÆÇ´ÜÇÕ´Ï´Ù.

    ¡¸t¡¹°¡ ¡¸MSPF¡¹º¸´Ù ÀÛÀº °æ¿ì´Â ó¸® ½Ã°£ÀÌ ¡¸³²¾Æ ÀÖ´Ù¡¹ °ÍÀ¸·Î 󸮸¦ ¹þ¾î ³³´Ï´Ù.
    ¡¸MSPF¡¹º¸´Ù ¡¸t¡¹°¡ À§¶ó¸é ó¸® ½Ã°£À» Áö³ª°í ÀÖÀ¸¹Ç·Î °ÔÀÓ Ã³¸®ÀÎ
    £û£ýÀÇ Ã³¸®¸¦ ½ÇÇàÇÕ´Ï´Ù.


    ¼Óµµ°¡ ´À¸° ¸Ó½ÅÀÇ Ã³¸®

    ´À¸° ¸Ó½Å¿¡¼­µµ °¡´ÉÇÑ ÇÑ °°Àº 󸮸¦ ½Ç½ÃÇϱâ À§Çؼ­ ¡¸do while¡¹¸¦ »ç¿ëÇÑ Ã³¸®¸¦ ÇÕ´Ï´Ù.
    ¿©±â¼­ ´À¸° ¸Ó½ÅÀº ¹Ýº¹ 󸮸¦ ÇÕ´Ï´Ù.

    ºü¸¥ ¸Ó½ÅÀ¸·Î ½ÇÇàÇßÀ» °æ¿ì¡¤¡¤¡¤¡¤Ä³¸¯ÅÍ´Â 1µµÆ®¾¿ ¿òÁ÷À̰ÚÁö¸¸
    ´ÊÀº ¸Ó½ÅÀÇ °æ¿ì, ¿©±âÀÇ Ã³¸®·Î 1µµÆ®ÀÌ»ó¾¿ ¿òÁ÷ÀÔ´Ï´Ù.
    (±×·¯³ª À̵¿¿¡ °É¸®´Â ½Ã°£Àº °ÅÀÇ °°°Ô µË´Ï´Ù.)

    do
    {
        t-=MSPF;
        prev_time+=MSPF;
        //¹¦È­ 󸮿Ü(Ãæµ¹ ÆÇÁ¤µî)ÀÇ Ã³¸®¸¦ ±â¼ú
    }
    while(t>=MSPF);

    À§ÀÇ ·çÇÁÀÇ È¸¼ö´Â ¡¸t¡¹ÀÇ °ª¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù.
    ´ÊÀº ¸Ó½ÅÀÇ °æ¿ì´Â ¡¸t¡¹ÀÇ °ªÀÌ Ä¿Áö¹Ç·Î ±× ¸¸Å­, º¸´Ù ¸¹ÀÌ ¿©±â¼­ ó¸®ÇØ¾ß ÇÕ´Ï´Ù.
    (ºü¸¥ ¸Ó½ÅÀÇ °æ¿ì´Â ¿©±â¼­ ¿©·¯¹ø ó¸®ÇÒ ÇÊ¿ä´Â ¾ø¾îÁø´Ù)

    ÀÌ Ã³¸®¸¦ ½ÇÇàÇÏ´Â À§Ä¡

    while(GetMessage(&msg, (HWND) NULL, 0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    ÇöÀç À§¿Í °°ÀÌ µÇ¾î ÀÖ´Â ¸Þ¼¼Áö ÇÔ¼ö¸¦ ºÎ¸£´Â WHILE¹®À» ÀÌÇÏ¿Í °°ÀÌ ÇÕ´Ï´Ù.
    while(TRUE)
    {
        if(PeekMessage(&msg, 0,0,0, PM_REMOVE))
        {
            if(msg.message==WM_QUIT) break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
            loop();
    }

    ¡¸PeekMessage¡¹´Â ¾ÆÀ̵¹ ·çÇÁ¸¦ °¡´ÉÇÏ°Ô ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù
    (ÇïÇÁ¿¡´Â »ó¼¼ÇÏ°Ô ³ª¿Í ÀÖÁö ¾ÊÁö¸¸, »ç¿ë¿¹´Â ½Ç·Á ÀÖ½À´Ï´Ù)

    ÷°¡
    timeGetTime ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ¡¸winmm.lib¡¹¸¦ ¸µÅ©ÇØ¾ß ÇÕ´Ï´Ù.
    ¡¸ddraw.lib¡¹¸¦ ¸µÅ©ÇßÀ» ¶§¿Í °°ÀÌ ¼³Á¤ÀÇ ¸µÅ©¿¡ À̰ÍÀ» Ãß°¡ÇÕ´Ï´Ù.
    ¶Ç, fabs ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¡¸math.h¡¹¸¦ óÀ½¿¡ ÀÎŬ·çµå ÇØ¾ß ÇÕ´Ï´Ù.

    //////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////

    À̹ÌÁöÀÇ ¹¦È­

    °ÔÀÓ¿¡¼­´Â À̹ÌÁöÀÇ Ç¥½Ã°¡ ÇʼöÀÔ´Ï´Ù.
    À̹øÀº ±âº»ÀûÀÎ À̹ÌÁöÀÇ ¹¦È­¸¦ ÇÕ´Ï´Ù.
    ¡¸ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º¡¹ ¡¸¹é ¹öÆÛ¡¹¸¦ »ý¼º µÇ¾î ÀÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.

    À̹ÌÁö¸¦ ¹¦È­ ÇÏ·Á¸é ¿ì¼± À̹ÌÁö¿Í °°Àº »çÀÌÁîÀÇ ¼­ÆäÀ̽º¸¦ »õ·Î ¸¸µé¾î
    ±× ¼­ÆäÀ̽º¸¦ ¡¸¹é ¹öÆÛ¡¹·Î Àü¼Û ÇÏ´Â °ÍÀ¸·Î ½ÃÀ۵˴ϴÙ.

    À§¿Í °°Àº È帧À¸·Î ¹¦È­¸¦ ÇÕ´Ï´Ù.
    ±×¸²ÁßÀÇ ¡¸FLIP(Çø³)¡¹Àº ¹é ¹öÆÛ¿Í ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¿Í ±³Ã¼ÇÔÀ¸·Î
    È­¸é¿¡ ¹é ¹öÆÛÀÇ ³»¿ëÀÌ Ç¥½ÃµÇ°í ¹¦È­°¡ ¹Ý¿µµË´Ï´Ù.
    Çø³¿¡ ÀÇÇØ ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º´Â ¹é ¹öÆÛ°¡ µË´Ï´Ù.
    ¹é ¹öÆÛ´Â ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º°¡ µË´Ï´Ù.

    À̹ÌÁö¿Í °°Àº »çÀÌÁîÀÇ ¼­ÆäÀ̽º¸¦ »ý¼ºÇÑ´Ù

    ¼­ÆäÀ̽ºÀÇ »ý¼ºÀÔ´Ï´Ù.
    ¿ì¼± À̹ÌÁö ·Îµå¿ë(ÀÌÇÏ£º½ºÇÁ¶óÀÌÆ®) ¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù.
    ¹é ¹öÆÛ³ª ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽ºµî ¸ðµÎ °°µµ·Ï ÇÕ´Ï´Ù.

    LPDIRECTDRAWSURFACE sprite=NULL;

    ¡¸LPDIRECTDRAWSURFACE¡¹·Î Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÕ´Ï´Ù.
    »ùÇÿ¡¼­´Â ¡¸global.h¡¹¿¡¼­ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.

    ¼­ÆäÀ̽º¸¦ ¸¸µå´Â ÇÔ¼ö
    »ùÇÿ¡¼­´Â ÀÌ Ã³¸®¸¦ ¡¸loadbmp ÇÔ¼ö¡¹¿¡¼­ Çϰí ÀÖ½À´Ï´Ù.
    ÀÌ ÇÔ¼ö´Â Àμö·Î ¼­ÆäÀ̽º¸¦ ¸¸µé°í ½ÍÀº BMP À̹ÌÁöÀÇ ÆÄÀϸíÀ» °Ç³×ÁÖ¸é
    ±× ¼­ÆäÀ̽º¸¦ »ý¼ºÇÕ´Ï´Ù.
    À̹ÌÁö´Â ¿öÅ© ½ºÆäÀ̽º°¡ ÀÖ´Â Æú´õ¿¡ ³Ö¾î ÁÖ¼¼¿ä

    ó¸®ÀÇ È帧
    1.¼­ÆäÀ̽º¸¦ ¸¸µé°í ½ÍÀº À̹ÌÁöÀÇ ÇÚµéÀ» ÃëµæÇÑ´Ù
    2.À̹ÌÁö Á¤º¸¸¦ Ãëµæ(À̹ÌÁöÀÇ »çÀÌÁîµîÀ» Ãëµæ)
    3.À̹ÌÁö Á¤º¸¿¡ µû¶ó ºó ¼­ÆäÀ̽º¸¦ »ý¼º
    4.À©µµ¿ì¿Í ȣȯÀÇ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ Ãëµæ
    5.µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¿¡ À̹ÌÁö ÇÚµéÀ» ¿¬°áÇÑ´Ù.
    6.¼­ÆäÀ̽º¿¡ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®ÀÇ Á¤º¸(À̹ÌÁö)¸¦ Àü¼Û
    7.ÇÚµéµîÀÇ ÇØ¹æ ó¸®
    8.Åõ°ú Ä®¶ó ŰÀÇ ¼³Á¤

    À§ÀÇ È帧À¸·Î À̹ÌÁöÀÇ ¼­ÆäÀ̽º »ý¼ºÀº 󸮵˴ϴÙ.

    1.À̹ÌÁöÀÇ ÇÚµé Ãëµæ
    WINDOWS ÇÁ·Î±×·¥¿¡¼­ Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡ À̹ÌÁö¸¦ Ç¥½ÃÇÒ ¶§¿¡ ÇÚµéÀ» ÃëµæÇß½À´Ï´Ù.
    ±× ¶§¿Í °°ÀÌ À̹ÌÁöÀÇ ÇÚµéÀ» ÃëµæÇÕ´Ï´Ù.

    ¡¸LoadImage ÇÔ¼ö¡¹·Î ÇÚµéÀ» ÃëµæÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù

    2.À̹ÌÁö Á¤º¸¸¦ ¾ò´Â´Ù
    ¿©±â¼­ ÇÊ¿äÇÑ À̹ÌÁöÀÇ Á¤º¸´Â À̹ÌÁöÀÇ °¡·Î, ¼¼·ÎÀÇ Å©±âÀÔ´Ï´Ù.
    ÀÌ Á¤º¸¸¦ ¾òÀ» ¼ö°¡ ÀÖÀ¸¸é ¾î¶°ÇÑ ¹æ¹ýµµ OKÀÔ´Ï´Ù.
    ¿©±â¼­´Â ¡¸GetObject ÇÔ¼ö¡¹¸¦ »ç¿ë À̹ÌÁöÀÇ Á¤º¸¸¦ ÃëµæÇÕ´Ï´Ù.
    »ùÇÿ¡¼­´Â ¡¸BITMAP ±¸Á¶Ã¼ bm¡¹¿¡ À̹ÌÁöÀÇ Á¤º¸°¡ °Ý³³µË´Ï´Ù.

    3.À̹ÌÁö »çÀÌÁîÀÇ ¼­ÆäÀ̽º¸¦ ¸Þ¸ð¸®¿¡ ¸¸µç´Ù
    »ùÇÿ¡¼­´Â ¡¸create_surface ÇÔ¼ö¡¹¸¦ ºÒ·¯ ¼­ÆäÀ̽º¸¦ »ý¼ºÇϰí ÀÖ½À´Ï´Ù.
    (create_surface´Â »ç¿ëÀÚ ÇÔ¼öÀÔ´Ï´Ù)
    create_surface ÇÔ¼öÀÇ Ã³¸®´Â init_surface ÇÔ¼ö¿¡¼­ ½ÇÇàÇÏ´Â ¡¸ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¡¹ÀÇ »ý¼º°ú °ÅÀÇ °°½À´Ï´Ù.

    LPDIRECTDRAWSURFACE7    surface;
    DDSURFACEDESC2            ddsd;    //0À¸·Î ÃʱâÈ­

    ZeroMemory(&ddsd, sizeof(ddsd));         //±¸Á¶Ã¼ÀÇ »çÀÌÁ ¼³Á¤
    ddsd.dwSize=sizeof(ddsd) ;

    //ddsCaps, dwWIdth, dwHeight¸¦ À¯È¿ÇÏ°Ô ÇÑ´Ù
    ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;     //¿ÀÇÁ½ºÅ©¸°¼­ÆäÀ̽º
    ddsd.ddsCaps.dwCaps=caps;     //¼­ÆäÀ̽ºÀÇ »çÀÌÁî ¼³Á¤
    ddsd.dwWidth=width;
    ddsd.dwHeight=height;
    if(dd->CreateSurface(&ddsd, &surface, NULL)!=DD_OK)
        return NULL;

    ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º »ý¼ºÀÇ Ã³¸®¿Í ´Ù¸¥ Á¡Àº ÁøÇÑ ¹®ÀÚÀÇ ºÎºÐÀÔ´Ï´Ù.
    ¡¸ddsd ±¸Á¶Ã¼(¾î¶² ¼­ÆäÀ̽º·Î ÇÒ±îÀÇ ¼³Á¤ÇÏ´Â ±¸Á¶Ã¼)¡¹¿¡ ¼­ÆäÀ̽ºÀÇ ¼ºÁú
    ¸¦ ³ªÅ¸³»´Â Ç÷¡±×¸¦ °Ç³×ÁÖ´Â ¸â¹ö

    ¡¸ddsd.dwFlags¡¹¿¡´Â ¡¸DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH¡¹ÀÇ 3°³ÀÇ Ç÷¡±×¸¦ °Ç³×¹Þ°í ÀÖ½À´Ï´Ù.
    ¡¸DDSD_HEIGHT¡¹ ¡¸DDSD_WIDTH¡¹ÀÇ Ç÷¡±×¸¦ °Ç³×ÁÖ¸é ¼­ÆäÀ̽ºÀÇ »çÀÌÁî ÁöÁ¤ÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù.
    ddsd.dwWidth ¸â¹ö¿Í ddsd.dwHeight ¸â¹ö°¡ »ç¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù
    ddsd.dwWidth=width;
    ddsd.dwHeight=height;
    Àμö·Î °Ç³×¹ÞÀº À̹ÌÁöÀÇ »çÀÌÁ¡¸ddsd ±¸Á¶Ã¼¡¹¿¡ °Ç³×ÁÝ´Ï´Ù.
    À̰ÍÀ¸·Î ¼­ÆäÀ̽ºÀÇ ¼³Á¤À» ¿Ï·áÇßÀ¸¹Ç·Î ¡¸CreateSurface¡¹¸¦ »ç¿ëÇØ¼­ ¼­ÆäÀ̽º¸¦ »ý¼ºÇÕ´Ï´Ù.

    ¸Þ¸ð¸®¿¡´Â À§¿Í °°ÀÌ À̹ÌÁö(½ºÇÁ¶óÀÌÆ®)ÀÇ ¼­ÆäÀ̽º°¡ »ý¼ºµÇ°í À̰ÍÀ¸·Î À̹ÌÁö ¹¦È­ÀÇ ÁغñµÇ¾ú½À´Ï´Ù.

    4.µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ Ãëµæ

    ÀÌÁ¦ ¸Þ¸ð¸®¿¡ À̹ÌÁö¿Í °°Àº »çÀÌÁîÀÇ ¼­ÆäÀ̽º´Â »ý¼ºµÇ¾úÁö¸¸ ±× ¾È¿¡´Â ¾ÆÁ÷ À̹ÌÁö µ¥ÀÌÅͰ¡ °Ý³³µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù.
    ¾ÆÁ÷ ºñ¾îÀÖ´Â ¼­ÆäÀ̽ºÀÔ´Ï´Ù.
    °Å±â¿¡ À̹ÌÁö µ¥ÀÌÅ͸¦ °Ý³³Çϴ ó¸®¸¦ ÇÕ´Ï´Ù.

    //ÇöÀçÀÇ È­¸é ¸ðµå¿Í ȣȯ¼ºÀÌ ÀÖ´Â ¸Þ¸ð¸®µð¹ÙÀ̽ºÄÜÅØ½ºÆ®¸¦ ÀÛ¼º.

    HDC hdcbmp;

    if(!(hdcbmp = CreateCompatibleDC(NULL)))
    {
        surface->Release();
        return NULL;
    }

    À§¿¡¼­ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ ÃëµæÇÏ´Â ÀÛ¾÷À» Çϰí ÀÖ½À´Ï´Ù.
    µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¶õ ¹¦È­ °ü·Ã ¼³Á¤Çϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.
    ¡¸CreateCompatibleDC(NULL)¡¹·Î ÁöÁ¤ÇÑ µð¹ÙÀ̽º(À©µµ¿ì, À̹ÌÁö)°°Àº ¼ºÁúÀÇ
    µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ÀÛ¼ºÇÒ ¼ö ¾ø´Â °æ¿ì´Â ÇÁ·Î±×·¥ Á¾·á
    ÀÛ¼ºÇÑ ¡¸µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¡¹¿Í¡¸¼­ÆäÀ̽º¿¡ ¹¦È­ÇÏ°í ½ÍÀº À̹ÌÁö¡¹¸¦ ¿¬°ü ½Ãŵ´Ï´Ù.
    SelectObject(hdcbmp, hbm);

    6.¼­ÆäÀ̽º¿¡ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®ÀÇ Á¤º¸(À̹ÌÁö)¸¦ Àü¼Û
    ¿©±â¼­ ¼­ÆäÀ̽º¿¡ À̹ÌÁö µ¥ÀÌÅ͸¦ Àü¼Û ÇØ¼­ ¡¸Ç¥¸é=À̹ÌÁö¡¹¶ó°í ÇÏ´Â »óÅ·ΠÇÕ´Ï´Ù.

    HDC     hdc;
    if(surface->GetDC(&hdc) ==DD_OK)
    {
        BitBlt(hdc, 0,0, bm.bmWidth, bm.bmHeight, hdcbmp, 0,0, SRCCOPY);
            surface->ReleaseDC(hdc);
    }

    À§ÀÇ Ã³¸®¸¦ º¸¸é ¼­ÆäÀ̽ºÀÇ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ ÃëµæÇØ¼­ ¡¸BitBlt ÇÔ¼ö¡¹¸¦ »ç¿ëÇØ¼­ À̹ÌÁö µ¥ÀÌÅ͸¦ ¼­ÆäÀ̽º·Î Àü¼Û Çϰí ÀÖ½À´Ï´Ù.
    Àü¼ÛÀ» Á¾·áÇÏ¸é ¡¸µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¡¹¸¦ ÇØ¹æÇϰí ÀÖ½À´Ï´Ù.
    ¼­ÆäÀ̽ºÀÇ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®´Â ¡¸surface ¿ÀºêÁ§Æ®¡¹ÀÇ ¡¸ReleaseDC¡¹¸¦ »ç¿ëÇØ¼­ ÇØ¹æÇØ¾ß ÇÕ´Ï´Ù.

    À̰ÍÀ¸·Î ¼­ÆäÀ̽º¿¡´Â À̹ÌÁöÀÇ Á¤º¸°¡ °Ý³³µÇ¾ú½À´Ï´Ù.
    ¼Ò½º¿¡¼­´Â ´ÙÀ½À¸·Î Åõ°ú Ű(½ºÇÁ¶óÀÌÆ®·Î¼­ ¹¦È­ ÇÒ ¶§ÀÇ Åõ°ú»ö¼³Á¤)ÀÇ Ã³¸®¸¦
    °¡°í ÀÖ½À´Ï´Ù.(¸¶½ºÅ©Ä÷¯ ¼³Á¤)

    º¸Ãæ

    ¼­ÆäÀ̽º°¡ Áõ°¡Çϸé ÇÁ·Î±×·¥À» Á¾·áÇÒ ¶§ ÇØ¹æÇØ¾ß ÇÏ´Â ¼­ÆäÀ̽º°¡
    Áõ°¡ÇϰÚÁö¿ä.
    ÇØ¹æ 󸮸¦ Çϰí ÀÖ´Â ÇÔ¼ö¿¡ Ãß°¡ÇÑ ¼­ÆäÀ̽ºÀÇ ÇØ¹æÃ³¸®¸¦ Ãß°¡ÇսôÙ.

    ½ºÇÁ¶óÀÌÆ®¿ëÀÇ ¼­ÆäÀ̽º´Â ¸Þ¸ð¸®°¡ ÃæÁ·µÇ´Â ÇÑ ¾ó¸¶µçÁö »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ÇÊ¿äÇÑ ¼ö¸¸Å­ ¼­ÆäÀ̽º¸¦ ¸¸µé¾îµµ ±¦ÂúÀ» °ÍÀÔ´Ï´Ù.

    (¼­ÆäÀ̽º´Â ¿©·¯ °³¸¦ ¸¸µé¾î¼­ µû·Î RoadÇÏ´Â °Íº¸´Ù Çϳª¿¡¼­ RoadÇÏ´ÂÆíÀÌ
    ¼Óµµ°¡ ´õ ºü¸¨´Ï´Ù)

    DirectX DRAW¡¡Çø³
    Àü ȸ¿¡¼­ ¼­ÆäÀ̽º¸¦ ¸¸µé°í À̹ÌÁö¸¦ ¹¦È­ ÇÒ Áغñ´Â µÆÁö¸¸ ¾ÆÁ÷ ¼­ÆäÀ̽º¸¦ ¹¦È­Çϰí ÀÖÁö´Â ¾Ê½À´Ï´Ù.
    ÀÌÁ¦ ¼­ÆäÀ̽ºÀÇ ³»¿ëÀ» È­¸é¿¡ Ç¥½ÃÇÕ´Ï´Ù.
    Áö±Ý±îÁö ÇÁ·Î±×·¥Àº À§ÀÇ ±×¸²°ú °°ÀÌ ¸Þ¸ð¸®»ó¿¡ ¼­ÆäÀ̽º´Â Á¸ÀçÇϰí ÀÖ¾ú½À´Ï´Ù.
    ÇÏÁö¸¸, È­¸é¿¡´Â Ç¥½ÃµÇ°í ÀÖÁö ¾Ê¾Ò½À´Ï´Ù.
    È­¸é¿¡ Ç¥½ÃµÇ°í ÀÖ´ø °ÍÀº ºñ¾îÀÖ´Â À©µµ¿ì Ŭ¶óÀÌ¾ðÆ® ¿µ¿ªÀÔ´Ï´Ù.

    Çø³(Flip)
    ¼­ÆäÀ̽º¸¦ ¡¸Çø³¡¹¿¡ ÀÇÇØ È­¸é¿¡ ¹¦È­ ÇÕ´Ï´Ù.
    ÀÌ ¡¸Çø³¡¹Àº °ÔÀÓÀÌ µ¿ÀÛÇÏ´Â µ¿¾È ¹Ýº¹½ÇÇà µË´Ï´Ù.

    ¹¦È­ÀÇ È帧
    ù¹øÂ°ÀÇ¡¸Çø³¡¹À» Çϸ顸ȭ¸é(µð½ºÇ÷¹ÀÌ)¡¹= ¡¸ÇÁ·ÐÆ®¼­ÆäÀ̽º(ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º)¡¹ÀÇ »óÅÂÀÔ´Ï´Ù.
    È­¸é¿¡´Â ¡¸ÇÁ·ÐÆ® ¼­ÆäÀ̽º¡¹ÀÇ Á¤º¸(À̹ÌÁö)°¡ Ç¥½ÃµË´Ï´Ù.
    ¹¦È­ ¼ø¼­´Â ¡¸½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽º¡¹¿¡¼­ ¡¸¹é¼­ÆäÀ̽º¡¹·Î ¹¦È­(Àü¼Û) ÇÕ´Ï´Ù.
    À̰Ϳ¡ ÀÇÇØ ¡¸¹é¼­ÆäÀ̽º¡¹¸¦ ¡¸Çø³¡¹ÇÕ´Ï´Ù.

    ¡¸Çø³¡¹À» ÇÏ¸é ¡¸ÇÁ·ÐÆ® ¼­ÆäÀ̽º¡¹¿Í¡¸¹é¼­ÆäÀ̽º¡¹°¡ ±³Ã¼µË´Ï´Ù.
    ±×·¯¸é Áö±Ý±îÁö È­¸é¿¡ ¹Ý¿µµÇ¾î ÀÖÁö ¾Ê¾Ò´ø ¡¸¹é¼­ÆäÀ̽º¡¹ÀÇ Á¤º¸(À̹ÌÁö)°¡ Ç¥½ÃµË´Ï´Ù.
    ÇÁ·Î±×·¡¸Ó´Â Ç×»ó ¡¸¹é¼­ÆäÀ̽º¡¹¿¡ À̹ÌÁö¸¦ ³Ö¾î ¡¸Çø³¡¹ÇÏ¸é µË´Ï´Ù.

    ÇöÀçÀÇ »óÅ·Πȭ¸é¿¡´Â ¼­ÆäÀ̽ºÀÇ Á¤º¸°¡ Ç¥½ÃµÇ°í ÀÖÀ¸¹Ç·Î À̰ÍÀ¸·Î µÇ¾ú´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¡¸Çø³¡¹À» ½ÇÇàÇϰí ÀÖ´Â ºÎºÐ¡¤¡¤¡¤¡¤

    loop ÇÔ¼ö

    void loop(void)
    {
        if(timeGetTime()=MSPF)
        {
            do
            {
                t-=MSPF;
                prev_time+=MSPF;
                // ó¸® ±â¼ú
            }
            while(t>=MSPF);
            //flip ÇÔ¼ö·Î Çø³À» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù.
            flip();
        }
    }

    loop ÇÔ¼ö·Î ¡¸Çø³¡¹À» Çϰí ÀÖ½À´Ï´Ù(Çø³ ÇÔ¼ö¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù)
    loop ÇÔ¼ö´Â 60 FPS¸¦ ó¸®Çϰí ÀÖ´Â °÷¿¡¼­ ¡¸flip()¡¹ÇÔ¼ö°¡ ÀÖ´Â À§Ä¡´Â
    1ÃÊ¿¡ (¾à)60ȸ ½ÇÇàµÇ´Â °÷ÀÔ´Ï´Ù.

    MainSurface->Flip(NULL, DDFLIP_WAIT);

    ÇÏÁö¸¸ ¡¸flip ÇÔ¼ö¡¹·Î 󸮵ǰí ÀÖ´Â ³»¿ëÀº
    ÀÌ 1ÇุÀ¸·Î ¼­ÆäÀ̽º¸¦ È­¸é¿¡ Ç¥½ÃµÇ´Â ¼­ÆäÀ̽º·Î ¹Ù²ã ³Ö±â¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¡¸ÇÁ·ÐÆ®¼­ÆäÀ̽º(È­¸é¿¡ º¸ÀÌ´Â ¼­ÆäÀ̽º)¡¹¸¦ Ÿ°ÙÀ¸·Î ¡¸Flip ÇÔ¼ö¡¹·Î ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////

    DirectX DRAW¡¡À̹ÌÁö ¹¦È­

    ½ºÇÁ¶óÀÌÆ®ÀÇ ¼­ÆäÀ̽ºµµ ¸¸µé°í Çø³µµ Çß½À´Ï´Ù.
    ¿ÏÀüÇÏ°Ô À̹ÌÁöÀÇ ¹¦È­°¡ °¡´ÉÇÑ »óŰ¡ µÇ¾úÀ¸¹Ç·Î À̹ÌÁö ¹¦È­¸¦ ÇÕ´Ï´Ù.

    ¹¦È­´Â ¡¸¹é¼­ÆäÀ̽º¡¹¿¡ÀÇ ¡¸Àü¼Û¡¹¡¤¡¤¡¤±×¸®°í ½Ç½ÃÇÕ´Ï´Ù.
    ¡¸¹é¼­ÆäÀ̽º¡¹¿¡ÀÇ Àü¼ÛÀº ¡¸Çø³¡¹À» Çϱâ Àü¿¡ ½Ç½ÃÇÕ´Ï´Ù.

    void loop(void)
    {
        if(timeGetTime()=MSPF)
        {
            do
            {
                t-=MSPF;
                prev_time+=MSPF;
                //°è»ê ó¸®
            }
            while(t>=MSPF);

            //¹¦È­ ó¸®
            //flip ÇÔ¼ö·Î Çø³À» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù.
            flip();
        }
    }

    ±×·³ Ãß°¡µÈ °ÍÀ» »ìÆì º¸µµ·Ï ÇսôÙ.

    void loop(void)
    {
        if(timeGetTime()=MSPF)
        {
            do
            {
                t-=MSPF;
                prev_time+=MSPF;
                //°è»ê ó¸®
            }
            while(t>=MSPF);
            //¹¦È­ ó¸®

            imagerender();

            //flip ÇÔ¼ö·Î Çø³À» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù.
            flip();
        }
    }

    Ãß°¡ µÈ °ÍÀº ÀÌ¡¸loop ÇÔ¼ö¡¹ÀÔ´Ï´Ù.
    ÁøÇÑ ¹®ÀÚ·Î µÇ¾î ÀÖ´Â ºÎºÐÀÌ Ãß°¡µÈ ºÎºÐÀÔ´Ï´Ù.

    ¡¸imagerender()¡¹´Â À̹ÌÁö¸¦ ¹¦È­ Çϴ ó¸®¸¦ ¸ðÀº ÇÔ¼ö·Î ÀÓÀÇ·Î Á¦ÀÛ µÈ °ÍÀÔ´Ï´Ù.
    (ÇÔ¼öÀÇ ³»¿ªÀº ¹Ø¿¡¼­ ±â¼úµÇ°í ÀÖ½À´Ï´Ù.)

    void imagerender(void)
    {
        BackSurface->BltFast(150,150, sprite, NULL, DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
    }

    ¹¦È­¸¦ ½Ç½ÃÇϰí ÀÖ´Â ºÎºÐÀÔ´Ï´Ù.
    ÇÔ¼öÀÇ Àǹ̸¦ ¼Ò°³Çϸé
    ¿©±â¼­ »ç¿ëµÇ°í ÀÖ´Â ¡¸BltFast ÇÔ¼ö¡¹´Â ¡¸À̹ÌÁö¸¦ Àü¼Û¡¹ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.
    Àü¼ÛÀ̶õ ½ºÇÁ¶óÀÌÆ® À̹ÌÁö¸¦ ¹é¼­ÆäÀ̽º·Î ¹¦È­ÇÏ´Â °ÍÀÔ´Ï´Ù.

    ¡¸BitBlt ÇÔ¼ö¡¹´Â ¡¸È®´ë Ãà¼Ò¡¹°¡ °¡´ÉÇÏÁö¸¸ ¡¸BltFast ÇÔ¼ö¡¹¿Í ºñ±³ÇÏ¸é ½ºÇǵ忡¼­
    Á¶±Ý ¶³¾îÁö¹Ç·Î º¸Åë Àü¼ÛÇÏ´Â °æ¿ì´Â ¡¸BltFast ÇÔ¼ö¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.

    (BitBlt ÇÔ¼ö´Â µµÅ¥¸àÆ® ÂüÁ¶)

    HRESULT BltFast(
        DWORD dwX,            //¹¦È­ ÇÏ´Â XÁÂÇ¥
        DWORD dwY,            //¹¦È­ ÇÏ´Â YÁÂÇ¥
        LPDIRECTDRAWSURFACE3 lpDDSrcSurface,//ºÒ·¯¿Ã À̹ÌÁö°¡ µé¾î ÀÖ´Â ¼­ÆäÀ̽º
        LPRECT lpSrcRect,    //ºÒ·¯¿Ã ¼­ÆäÀ̽ºÀÇ ÀϺΠÀü¼ÛÀ» ½Ç½ÃÇÒ ¶§¿¡ »ç¿ë
        DWORD dwTrans        //Àü¼Û ŸÀÔ
    );

    (VC++ÇïÇÁ¿¡¼­)
    ¿ì¼± ù° Á¦2 ÆÄ¶ó¹ÌÅÍ´Â ÄÚ¸àÆ®´ë·ÎÀÔ´Ï´Ù.
    Àü¼ÛÇÒ À̹ÌÁö°¡ ¸¹Àº °æ¿ì´Â ½ºÇÁ¶óÀÌÆ®¼­ÆäÀ̽º¿¡¼­ ¹é ¹öÆÛ·Î Àü¼Û ÇÕ´Ï´Ù.
    ¹é ¹öÆÛÀÇ ¾î´À À§Ä¡(ÁÂÇ¥)¸¦ ¹¦È­ ÇÒ±î?
    ±× °ªÀ» ÆÄ¶ó¹ÌÅÍ 1, 2·Î ÁöÁ¤ÇÕ´Ï´Ù.
    Á¦3 ÆÄ¶ó¹ÌÅʹ ȣÃâÇÒ ¼­ÆäÀ̽ºÀÇ Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÕ´Ï´Ù.

    »ùÇÃÀÇ °æ¿ì´Â ÁغñÇÑ À̹ÌÁö(½ºÇÁ¶óÀÌÆ®)ÀÇ ¼­ÆäÀ̽º¸¦ °Ç³×ÁÖ°í ÀÖ½À´Ï´Ù.
    À̰Ϳ¡ ÀÇÇØ ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽ºÀÇ ³»¿ëÀ» º¸³¾ ¼­ÆäÀ̽º·Î Àü¼ÛÇϴ ó¸®¸¦
    ÇÕ´Ï´Ù.

    ÀÌ Á¦3 ÆÄ¶ó¹ÌÅ͸¦¡¸¹é¼­ÆäÀ̽º¡¹¿¡¼­µµ ÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù.

    Á¦4 ÆÄ¶ó¹ÌÅÍ´Â Çʿ信 µû¶ó¼­ »ç¿ëÇÕ´Ï´Ù.
    (¿©±â¸¦ NULL·Î Çϸé, ¼­ÆäÀ̽º ÀüºÎ¸¦ Àü¼ÛÀÌ ÇÑ´Ù!)

    ¼­ÆäÀ̽º¿¡´Â °ÔÀÓ¿¡¼­ »ç¿ëÇÏ´Â À̹ÌÁö¸¦ ÇѲ¨¹ø¿¡ ¸ð¾Æ¼­ »ý¼ºÇÒ °ÍÀÌ ¸¹½À´Ï´Ù.
    ÀϹÝÀûÀ¸·Î »ý¼ºÇÏ´Â ¼­ÆäÀ̽º¿¡´Â ¸¹Àº À̹ÌÁö¸¦ ¸ð¾Æ¼­ °Ý³³ÇÕ´Ï´Ù.

    (ij¸¯ÅͶó¸é ij¸¯Å͵îÀ¸·Î)

    ÇϳªÀÇ À̹ÌÁö¿¡ 1°³¾¿ ¼­ÆäÀ̽º¸¦ »ý¼ºÇÏ´Â °Íµµ ±¦ÂúÁö¸¸
    ¸Þ¸ð¸® °ø°£ÀÌ ³¶ºñÀÔ´Ï´Ù.(ÀûÀº ¿ë·®ÀÌÁö¸¸. . )
    °¡´ÉÇÑ ÇÑ È¿À²ÀûÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °ÍÀÌ ¿ª½Ã º£½ºÆ®¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¿¹·Î ¸¹Àº À̹ÌÁö¸¦ ÁغñÇØ µÐ °æ¿ì

    Á¦4 ÆÄ¶ó¹ÌÅ͸¦ NULL·Î ÇØ µÎ¸é ¼­ÆäÀ̽º Àüü°¡ Àü¼Û µÈ´Ù¡¤¡¤¡¤¡¤
    Áï Áö±Ý ÇÊ¿äÇÏÁö ¾ÊÀº À̹ÌÁö±îÁöµµ ¹¦È­µË´Ï´Ù.

    °Å±â¼­ ÀÌ Á¦4 ÆÄ¶ó¹ÌÅÍ¿¡´Â ¼­ÆäÀ̽ºÀÇ ¾î´À ºÎºÐÀ» Àü¼ÛÇÏ´Â °ªÀ» °Ç³×ÁÝ´Ï´Ù.
    ¿©±â¼­ °Ç³×ÁÖ´Â °ªÀº ¡¸RECT ±¸Á¶Ã¼¡¹°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.

    RECT ±¸Á¶Ã¼´Â 4°³ÀÇ ¸â¹ö

    ¡¸ÁÂÃø X¡¹ ¡¸ÁÂÃø Y¡¹ ¡¸¿ìÃø X¡¹ ¡¸¿ìÃø Y¡¹¶ó°í ÇÏ´Â ´À³¦ÀÇ ¸â¹ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
    ÀÌ ¸â¹ö °¢°¢ °ªÀ» °Ç³×ÁÖ¾î µÓ´Ï´Ù.
    ¡¸BltFast ÇÔ¼ö¡¹¸¦ ½ÇÇàÇϱâ Àü¿¡ RECT ±¸Á¶Ã¼¸¦ »ý¼ºÇØ °¢ ¸â¹ö¿¡ °ªÀ» ³Ö¾î µÎ¸é OK ÀÔ´Ï´Ù.

    Á¦5 ÆÄ¶ó¹ÌÅÍ´Â ¾î¶°ÇÑ Àü¼ÛÀ» ÇÒ±î?¸¦ °áÁ¤ÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.
    Ç÷¡±×´Â ÀÌÇϷκÎÅÍ ¼±ÅÃÇØ »ç¿ëÇÕ´Ï´Ù.(ÇïÇÁÂüÁ¶)

    DDBLTFAST_DESTCOLORKEY

    Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó ۸¦ »ç¿ëÇÏ´Â Åõ°úÇü ºí·Ï Àü¼ÛÀ» ÁöÁ¤ÇÑ´Ù.

    À̰ÍÀ» °Ç³×ÁÖ¸é ÁöÁ¤µÈ »öÀ» Åõ¸íÇÏ°Ô ÇØ¼­ ¹¦È­ ÇÑ´Ù
    (Àü¼ÛÇÒ °÷¿¡¼­ Åõ¸íó¸®)

    DDBLTFAST_NOCOLORKEY

    Åõ¸íÀÌ ¾Æ´Ñ º¸ÅëÀÇ º¹»ç ºí·Ï Àü¼ÛÀ» ÁöÁ¤ÇÑ´Ù.

    Åõ¸íÇÏ°Ô ÇÏÁö ¾Ê°í ¹¦È­

    DDBLTFAST_SRCCOLORKEY

    À̰ÍÀ» °Ç³×ÁÖ¸é ÁöÁ¤µÈ »öÀ» Åõ¸íÇÏ°Ô ÇØ¼­ ¹¦È­ ÇÑ´Ù
    (Àü¼ÛÇÒ °÷¿¡¼­ Åõ¸í󸮷Î)

    DDBLTFAST_WAIT

    ºí·Ï Àü¼ÛÀÌ ¹Ù»Û °æ¿ì, DDERR_WASSTILLDRAWING¿¡ ¹Ý¿µµÇ´Â °ªÀ» ¹Ù·Î µ¹·ÁÁÖÁö ¾Ê°í ±â´Ù¸°´Ù.
    ±×¸®°í ºí·Ï Àü¼ÛÀÇ Áغñ¸¦ ÇÏ´øÁö ȤÀº ´Ù¸¥ ¿¡·¯°¡ ¹ß»ýÇÏ´Â ´ë·Î Áï½Ã µ¹¾Æ¿Â´Ù.

    À̰ÍÀ» °Ç³× µÎÁö ¾ÊÀ¸¸é ¹¦È­ µÇÁö ¾ÊÀ» ¶§°¡ ÀÖÁö¸¸ ¹¦È­¸¦ ÇÒ ¼ö ÀÖÀ» ¶§±îÁö ¸ØÃá´Ù.
    ¶§¹®¿¡ 󸮰¡ Áö¿¬µÇ´Â °æ¿ìµµ ÀÖ´Ù
    º¸Ãæ

    BackSurface->BltFast

    ¡¤¡¤¡¤´Â ¿Ö ÀÌ·¸°Ô µÇ°í ÀÖ´ÂÁö?
    À§ÀÇ °æ¿ì´Â ¡¸¹é¼­ÆäÀ̽º¡¹·Î Àü¼ÛÀÌ µË´Ï´Ù.
    ¿©±â¸¦ ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽º·Î ÇÏ¸é ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽º·Î ¹¦È­ÇÏ°Ô µË´Ï´Ù.
    À̰ÍÀ» »ç¿ëÇØ À̹ÌÁö ÆíÁýµµ °¡´ÉÇÕ´Ï´Ù.

    //////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////

    ¼­ÆäÀ̽ºÀÇ ÃʱâÈ­


    Àü¸é painting¿¡ ÇØ´çÇÏ´Â ¡¸render ÇÔ¼ö¡¹¸¦ ¸¸µé¾ú½À´Ï´Ù.
    ÀÌ ÇÔ¼ö´Â ÀÌÀü ¡¸flip ÇÔ¼ö¡¹¸¦ È£ÃâÇß´ø ºÎºÐ¿¡¼­ À̰ÍÀ» È£ÃâÇϰí ÀÖ½À´Ï´Ù.


    void loop(void)
    {
        if(timeGetTime()=MSPF)
        {
            do
            {
                t-=MSPF;
                prev_time+=MSPF;
                // °è»ê ó¸®
            }
            while(t>=MSPF);

            //¹¦È­ ó¸®
            render();
        }
    }

    È£ÃâÇϰí ÀÖ´Â °ÍÀº £Àº ¹®ÀÚÀÇ ºÎºÐÀÔ´Ï´Ù.
    ±×·³ ¡¸render ÇÔ¼ö¡¹ÀÇ Ã³¸®´Â. . .

    void render(void)
    {
        DDBLTFX ddbltfx;
        ddbltfx.dwSize = sizeof(ddbltfx);
        ddbltfx.dwFillColor = 0;

        BackSurface->Blt(NULL, NULL, NULL,
        DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);

        imagerender();    // À̹ÌÁöÀÇ Àü¼Û

        flip();            // Çø³

    }

    Àû»ö ¹®ÀÚÀÇ ºÎºÐÀº ÀüȸÀÇ ÇÁ·Î±×·¥À¸·Î ¸¸µç ¹¦È­ ó¸®¿Í Çø³ÀÔ´Ï´Ù.
    ±×·³ À§·ÎºÎÅÍ ¼³¸í¡¤¡¤¡¤

        DDBLTFX ddbltfx;

        ddbltfx.dwSize        = sizeof(ddbltfx);
        ddbltfx.dwFillColor    = 0;

    ¡¸DDBLTFX ±¸Á¶Ã¼¡¹¸¦ Á¤ÀÇÇÕ´Ï´Ù.

    À̰ÍÀº È­¸é È¿°ú µîÀ» Ç¥ÇöÇÒ ¶§¿¡ Àß »ç¿ëÇÏ´Â ±¸Á¶Ã¼ÀÔ´Ï´Ù.
    ÀÌ ±¸Á¶Ã¼¿¡ ½Ç½ÃÇÏ°í ½ÍÀº È­¸é È¿°úÀÇ °ª(Ç÷¡±×)À» ¸®ÅÏÇØ¼­ ¡¸Blt ÇÔ¼ö¡¹¸¦ ½ÇÇàÇÏ¸é ¿©·¯ °¡Áö È­¸é È¿°ú¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

    È­¸é È¿°ú¿¡¼­ Á¦ÀÏ °£´ÜÇÑ °ÍÀÌ È­¸éÀÇ ÃʱâÈ­ÀÔ´Ï´Ù.
    À§¿¡¼­´Â ¡¸DDBLTFX ±¸Á¶Ã¼¡¹¸¦ Á¤ÀÇÇØ ¡¸dwSize¡¹ ¡¸dwFillColor¡¹¶ó°í ÇÏ´Â
    ¸â¹ö¿¡ °ªÀ» °Ç³×ÁÝ´Ï´Ù.

    ¡¸dwSize¡¹´Â ±¸Á¶Ã¼ »çÀÌÁ ÀÔ·ÂÇÕ´Ï´Ù.
    ¡¸dwFillColor¡¹¸¸ÀÌ Æ÷ÀÎÆ®!
    ¡¸dwFillColor¡¹´Â ÆäÀÎÆÃÇÏ´Â »öÀ» ÁöÁ¤ÇÕ´Ï´Ù.
    »ùÇÿ¡¼­´Â ¡¸0¡¹À» °Ç³×ÁÖ°í ÀÖÁö¸¸ RBG°ªÀ¸·Î °Ç³×ÁÙ ¼öµµ ÀÖ½À´Ï´Ù.

    È帧Àº À§ÀÇ ±×¸²°ú °°½À´Ï´Ù.
    °á±¹ ÆäÀÎÆÃµµ ¹¦È­ ¸í·É¿¡ ÀÇÇØ ½ÇÇàµË´Ï´Ù(Blt ¸í·ÉÀ¸·Î)
    BackSurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);
    À§ÀÇ ºÎºÐÀÌ ÆäÀÎÆÃÀÇ ÇϳªÀÇ ¿¹ÀÔ´Ï´Ù.

    Blt ÇÔ¼öÀÇ »ç¾ç
    Á¦1 ÆÄ¶ó¹ÌÅÍ- Àü¼ÛÇÒ °÷ÀÇ Á÷»ç°¢Çü(RECT ±¸Á¶Ã¼·Î)
    Á¦2 ÆÄ¶ó¹ÌÅÍ-Àü¼ÛÇØ ¿Ã °÷ÀÇ ¼­ÆäÀ̽º
    Á¦3 ÆÄ¶ó¹ÌÅÍ-Àü¼ÛÇØ ¿Ã °÷ÀÇ Á÷»ç°¢Çü(RECT ±¸Á¶Ã¼·Î)
    Á¦4 ÆÄ¶ó¹ÌÅÍ-Ç÷¡±×
    Á¦5 ÆÄ¶ó¹ÌÅÍ-DDBLTFX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ
    Áß¿äÇÑ °ÍÀº Ç÷¡±×ÀÔ´Ï´Ù. ±× ¿Ü¿¡´Â ¸ðµÎ ÆäÀÎÆÃÀ» ÇÒ °æ¿ì´Â ¡¸NULL¡¹·Î ¼³Á¤ÇÕ´Ï´Ù.

    ¡¸DDBLT_COLORFILL¡¹ Ç÷¡±×´Â ¹Ýµå½Ã °Ç³×ÁÝ´Ï´Ù.
    À̰ÍÀº À§¿¡¼­ ÀüºÎ ÆäÀÎÆÃ ÇÏ´Â »öÀ» °áÁ¤ÇÑ ¡¸DDBLTFX ±¸Á¶Ã¼¡¹¸¦ »ç¿ëÇϵµ·Ï µË´Ï´Ù.
    ¡¸DDBLT_WAIT¡¹´Â ±×°ÍÀÌ ³¡³¯ ¶§±îÁö 󸮸¦ ¸ØÃá´Ù´Â ÀǹÌÀÔ´Ï´Ù.

    ¿©±â±îÁöÀÇ Ã³¸®·Î ¹é¼­ÆäÀ̽º´Â ¸ðµÎ blackÀ¸·Î paintingµË´Ï´Ù.

    ////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////

    ¼­ÆäÀ̽ºÀÇ ÀϺΠÀü¼Û

    À̹øÀº ½ºÇÁ¶óÀÌÆ® ¼­ÆäÀ̽ºÀÇ ÀϺθ¦ ¹é¼­ÆäÀ̽º¿¡ Àü¼ÛÇÏ´Â
    ÀÛ¾÷À» ½Ç½ÃÇսôÙ.

    À§ÀÇ ±×¸²°ú °°ÀÌ ¼­ÆäÀ̽ºÀÇ ÀϺθ¦ Àü¼ÛÇÕ´Ï´Ù.
    À̰ÍÀ» ÇÒ ¶§´Â ´ç¿¬È÷ ±× ¹üÀ§¸¦ ³ªÅ¸³»´Â º¯¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
    ÀÌ ¹æ¹ýÀ¸·Î ij¸¯ÅÍÀÇ ¾Ö´Ï¸ÞÀ̼ÇÀ» Ç¥ÇöÇÏ´Â °ÍÀÌ ¿ëÀÌÇÏ°Ô µË´Ï´Ù.

    Ãß°¡ µÈ ºÎºÐÀ¸·Î

    ½ÇÁ¦·Î ¹¦È­¸¦ ½Ç½ÃÇϰí ÀÖ´Â ¡¸BltFast ÇÔ¼ö¡¹¸¦ ½ÇÇàÇϰí ÀÖ´ø ºÎºÐÀÔ´Ï´Ù.
    Àü¹øÀÇ ÇÁ·Î±×·¥¿¡¼­´Â¡¤¡¤¡¤¹¦È­¸¦ ½Ç½ÃÇϰí Àִ ó¸®´Â ÀÌÇÏ¿Í °°ÀÌ µÇ¾îÀÖ¾ú½À´Ï´Ù

    //---------------------------------------
    //imagerender ÇÔ¼ö£º¹é¼­ÆäÀ̽º¿¡ ¹¦È­

    void imagerender(void)
    {
        BackSurface->BltFast(150,150, sprite, NULL, DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
    }
    ÀÌ ºÎºÐÀ» º¯°æÇÕ´Ï´Ù.

    ¡¸BltFast ÇÔ¼ö¡¹ÀÇ Á¦4 ÆÄ¶ó¹ÌÅͰ¡ Àü¹ø¿¡´Â ¡¸NULL¡¹À̾ú½À´Ï´Ù.
    ÀÌ ÆÄ¶ó¹ÌÅͰ¡ ¼­ÆäÀ̽ºÀÇ ¾î´À ºÎºÐÀ» Àü¼Û ÇÒÁö?

    ±× À§Ä¡¿Í »çÀÌÁ °ª(value)À¸·Î ÇØ¼­ °Ç³×ÁÖ´Â ÆÄ¶ó¹ÌÅÍ·Î ¿©±â¿¡ ¡¸RECT ±¸Á¶Ã¼¡¹ÀÇ Æ÷ÀÎÅÍ·Î ÆÄ¶ó¹ÌÅÍ¿¡ °Ç³×ÁÝ´Ï´Ù.
    ±×·¯¸é ¹Ì¸® ¡¸RECT ±¸Á¶Ã¼¡¹¿¡ °ªÀ» ³Ö¾î µÎ¾î¾ß ÇÕ´Ï´Ù.

    ¿ì¼±Àº ¡¸RECT ±¸Á¶Ã¼¡¹¸¦ Á¤ÀÇÇÕ´Ï´Ù.

    void imagerender(void)
    {
        RECT rect;
        BackSurface->BltFast(150,150, sprite,&rect, DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
    }

    RECT ±¸Á¶Ã¼´Â »ç°¢ÇüÀÇ ½ÃÀÛ À§Ä¡ ÁÂÇ¥¿Í ±× »çÀÌÁ º¸°üÇϴµ¥ ÀûÇÕÇÑ ±¸Á¶Ã¼ÀÔ´Ï´Ù.
    (ÇïÇÁÂüÁ¶)
    ±×·±µ¥, RECT ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÑ ÈÄ´Â, 4°³ÀÇ ¸â¹ö¿¡ °ªÀ» ¼ÂÆÃÇØ¾ß ÇÕ´Ï´Ù.

    »ùÇÿ¡¼­ÀÇ À̹ÌÁö´Â ¡¸64¡¿32¡¹»çÀÌÁîÀÇ À̹ÌÁöÀÔ´Ï´Ù.
    RECT ±¸Á¶Ã¼¸¦ »ç¿ëÇØ À̹ÌÁö ¸ðµÎ¸¦ Àü¼Û ÇÒ ¶§´Â¡¤¡¤¡¤¡¤

    left¡¡¡¡¿¡´Â ¡¸0¡¹
    top¡¡¡¡¿¡´Â ¡¸0¡¹
    right¡¡¿¡´Â ¡¸63¡¹
    under¡¡¿¡´Â ¡¸31¡¹

    À§ÀÇ °°ÀÌ °ªÀ» ÀÔ·ÂÇÕ´Ï´Ù.

    À̹ÌÁö »çÀÌÁ´Ù 1³·Àº ÀÌÀ¯´Â 0ºÎÅÍ Ã½Å©Çϱ⠶§¹®ÀÔ´Ï´Ù.
    (¼­ÆäÀ̽ºÀÇ »çÀÌÁ´Ù Å« °ªÀ¸·Î ¹üÀ§ ÁöÁ¤Çϸé À̹ÌÁö°¡ Ç¥½ÃµÇÁö ¾Ê±â ¶§¹®¿¡ ÁÖÀÇ)

    À§¿Í °°ÀÌ Ç¥½ÃÇÒ ¶§´Â¡¤¡¤¡¤

    left¡¡¡¡¿¡´Â ¡¸0¡¹
    top¡¡¡¡¿¡´Â ¡¸0¡¹
    right¡¡¿¡´Â ¡¸31¡¹
    under¡¡¿¡´Â ¡¸31¡¹

    ¡¸BltFast ÇÔ¼ö¡¹¸¦ »ç¿ëÇϱâ Àü¿¡ ¡¸RECT ±¸Á¶Ã¼¡¹¸¦ À§ÀÇ °ªÀ¸·Î ÃʱâÈ­Çϸé,
    RECT rect={0,0,63,31};

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////

    ½ºÇÁ¶óÀÌÆ® À̵¿

    À̹ÌÁö ¹¦È­°¡ µÇ¸é ½ºÇÁ¶óÀÌÆ®ÀÇ À̵¿µµ °£´ÜÇÕ´Ï´Ù.
    ¹¦È­ ÇÔ¼öÀÎ ¡¸BltFast¡¹µîÀÇ ÆÄ¶ó¹ÌÅ͸¦ ÇÁ·Î±×·¥¿¡¼­ Áõ°¡ ¶Ç´Â °¨¼Ò ½ÃŰ¸é ½ºÇÁ¶óÀÌÆ®´Â À̵¿ÇÕ´Ï´Ù.

    ¹¦È­ µÉ ¶§ ÁÂÇ¥ °ªÀ» º¯°æÇÏ¸é ½ºÇÁ¶óÀÌÆ®´Â ¿òÁ÷À̰í ÀÖ´Â °Íó·³ º¸ÀÔ´Ï´Ù.
    »ùÇÃÀº ¿ìÃø ¹æÇâÀ¸·Î ij¸¯Å͸¦ À̵¿½ÃŰ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

    void imagerender(void)
    {
        RECT rect={0,0,63,31};
        BackSurface->BltFast(xpos, ypos,sprite, &rect,
        DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
        xpos++//ij¸¯ÅÍÀÇ XÁÂÇ¥ °ª¿¡ 1 Ç÷¯½º
    }

    ij¸¯Å͸¦ ¹¦È­ ÇÏ´ø ¡¸imagerender ÇÔ¼ö¡¹°¡ º¯°æµÇ¾î ÀÖ½À´Ï´Ù.
    ¿ì¼±Àº ¡¸BltFast¡¹ÀÇ Á¦1, 2 ÆÄ¶ó¹ÌÅͰ¡ Áö±Ý±îÁö´Â Á÷Á¢ °ªÀ» °Ç³×ÁÖ¾úÀ¸³ª
    ¿©±â¸¦ º¯¼ö·Î ÇØ¼­ ij¸¯ÅÍÀÇ ÁÂÇ¥¸¦ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.

    ¡¸xpos¡¹ ¡¸ypos¡¹°¢°¢ ±Û·Î¹ú·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù.(global.h¿¡)
    xpos++//ij¸¯ÅÍÀÇ XÁÂÇ¥ °ª¿¡ 1 Ç÷¯½º

    ÀÌ Ã³¸®´Â ij¸¯ÅÍÀÇ Ç¥½Ã ÁÂÇ¥ÀÇ X °ªÀÎ ¡¸xpos¡¹¿¡ 1À» Ç÷¯½ºÇϰí ÀÖ½À´Ï´Ù.
    ±×·Î ÀÎÇØ ´ÙÀ½¿¡ ¹¦È­ µÉ ¶§´Â ¡¸X+1¡¹µÈ À§Ä¡¿¡ ¹¦È­µË´Ï´Ù.

    Æ÷ÀÎÆ®
    »ùÇÿ¡ ´ëÇØ

    »ùÇÿ¡¼­´Â ij¸¯ÅͰ¡ È­¸é ³¡¿¡ µµ´ÞÇÏ¸é °©Àڱ⠻ç¶óÁý´Ï´Ù.
    À̰ÍÀº ¼­ÆäÀ̽ºÀÇ Ç¥½Ã ¿µ¿ªÀ» ³Ñ¾î°¡ ¹ö·È±â ¶§¹®ÀÔ´Ï´Ù.

    ij¸¯ÅÍÀÇ 1 µµÆ®°¡ ¼­ÆäÀ̽º»çÀÌÁ ÃʰúÇß´Ù

    °©Àڱ⠻ç¶óÁö´Â °ÍÀ» ¸·À¸·Á¸é 󸮰¡ ÇÊ¿äÇÕ´Ï´Ù.
    DirectX¿¡¼­´Â À̰ÍÀ» °£´ÜÇÏ°Ô ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ±â¿ï±â À̵¿

    ¸¸¾à ¡¸¿À¸¥ÂÊ À§¡¹ÀÇ ±â¿ï±â À̵¿À» ½Ç½ÃÇÏ°í ½ÍÀ» ¶§´Â ¡¸X°ª¿¡ Ç÷¯½º¡¹ ¡¸Y°ª¿¡ ¸¶À̳ʽº¡¹ÇÕ´Ï´Ù.
    ±×·¯¸é ¿À¸¥ÂÊ À§·Î ºñ½ºµëÇÏ°Ô ÁøÇàµË´Ï´Ù.

    ±â¿ï±â À̵¿ÀÌ Á¾È¾ÀÇ À̵¿º¸´Ù ¾à°£ °í¼ÓÀÔ´Ï´Ù.
    À̰ÍÀº 1 µµÆ®(¿òÁ÷ÀÌ´Â ¿ä¼Ò)°¡ Á¤¹æÇüÀ¸·Î Á¾È¾ÀÇ ±æÀÌ´Â µ¿ÀÏÇѵ¥ ºñ±³
    ±â¿ï±âÀÇ ±æÀ̰¡ °¡·Î¼¼·Îº¸´Ù ¾à°£ ±æ±â ¶§¹®¿¡ ±×·¸°Ô µË´Ï´Ù.

    ½º½º·Î Á¤¹æÇüÀ» ±×·Á ±â¿ï±â ¼±°ú °¡·Î¼¼·ÎÀÇ ±æÀ̸¦ ºñ±³ÇØ º¸ÀÚ
    ¸¸¾à ±â¿ï±âÀÇ À̵¿µµ Á¾È¾°ú °°Àº ½ºÇǵå·Î À̵¿½ÃŰ°í ½ÍÀ» ¶§´Â ±×°ÍÀ» °í·ÁÇÑ °è»êÀÌ
    ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////

    Animation

    ¾Ö´Ï¸ÞÀ̼ÇÀ̶õ?
    ij¸¯ÅͰ¡ ¿òÁ÷À̰í ÀÖ´Â °Íó·³ º¸ÀÌ°Ô ÇÏ´Â °ÍÀÔ´Ï´Ù.

    ÇϳªÀÇ Ä³¸¯ÅÍ¿¡ ¿©·¯ °³ÀÇ À̹ÌÁö¸¦ ÁغñÇØ¼­ ±×°ÍÀ» Â÷·Ê·Î ¹¦È­ ÇÔÀ¸·Î ¿òÁ÷À̰í ÀÖ´Â
    °Íó·³ º¸ÀÌ´Â ¹æ¹ýÀÔ´Ï´Ù.

    RPG¶ó¸é ij¸¯Å͸¦ °È°Ô ÇÏ´Â ¾Ö´Ï¸ÞÀ̼ÇÀÌ ÇÊ¿äÇÕ´Ï´Ù.

    À§¿Í °°ÀÌ Ä³¸¯ÅͰ¡ °È°í ÀÖ´Â À̹ÌÁö¸¦ ÁغñÇϰí
    A°¡ ¹¦È­ µÇ¸é, ´ÙÀ½Àº B¸¦ ¹¦È­¡¤¡¤¡¤±× ´ÙÀ½À¸·Î C¸¦ ¹¦È­
    Â÷·ÊÂ÷·Ê À̹ÌÁö¸¦ ±³Ã¼Çؼ­ ¾Ö´Ï¸ÞÀÌ¼Ç ÇÕ´Ï´Ù.
    »ùÇÿ¡¼­´Â ij¸¯ÅͰ¡ °È´Â ¾Ö´Ï¸ÞÀ̼ÇÀ» °°Àº À§Ä¡¿¡¼­ ¹Ýº¹ÇÕ´Ï´Ù.

    ij¸¯ÅÍ´Â À§ÀÇ À̹ÌÁö¸¦ »ç¿ëÇØ¼­ ¹¦È­ÇÕ´Ï´Ù.
    À§ÀÇ °°Àº È帧À¸·Î ÁøÇàµË´Ï´Ù.
    Ç÷¡±×´Â ´ÙÀ½¿¡ Ç¥½ÃÇÏ´Â À̹ÌÁöÀÇ ¹øÈ£¸¦ ³ªÅ¸³»°Ô µË´Ï´Ù.


    void imagerender(void)
    {
        static int flg=1//ij¸¯ÅÍÀÇ ¹¦È­ Ç÷¡±×ÀÔ´Ï´Ù
        RECT rect={0,0,31,31};
        if(flg==1){         //flg=1À϶§
            flg=2;
            rect.left=0;
            rect.right=31;
        }
        else{
            if(flg==2){         //flg=2À϶§
                flg=3;
                rect.left=32;
                rect.right=63;
            }
            else{                 //flg=3À϶§
                flg=1;
                rect.left=64;
                rect.right=95;
            }
        }
        BackSurface->BltFast(xpos, ypos, sprite, &rect, DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
        //xpos++;//ij¸¯ÅÍÀÇ XÁÂÇ¥°ª¿¡ 1 Ç÷¯½º
    }

    ÇöÀç´Â ´Ü¼øÈ÷ µ¿ÀÛ µË´Ï´Ù.
    »ùÇÿ¡¼­ º¯°æµÈ °ÍÀº À§ÀÇ ¡¸imagerender ÇÔ¼ö¡¹ »ÓÀÔ´Ï´Ù.
    ¿©±â¼­ À̹ÌÁö´Â ¾î¶² °ÍÀ» Ç¥½ÃÇÒ±î? ¸¦ ÆÇ´ÜÇØ¼­ ij¸¯Å͸¦ ¹¦È­Çϰí ÀÖ½À´Ï´Ù.
    (´ÊÀº ±âÁ¾Àº loop ÇÔ¼ö·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù)

    º»·¡´Â ¾Ö´Ï¸ÞÀ̼ÇÀº »ç¶÷ÀÌ ÀνÄÇÒ ¼ö ÀÖÀ» Á¤µµÀÇ ½ºÇǵå¿Í ²÷¾îÁö´Â ´À³¦ÀÌ ¾øµµ·Ï
    ¹¦È­µÇ¾î¾ß ÇÕ´Ï´Ù.

    ////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////

    ŰÀ̺¥Æ®ÀÇ ¹ß»ý

    ¸¹Àº °ÔÀÓÀº Ç÷¹À̾î·ÎºÎÅÍÀÇ Å°À̺¥Æ®¿¡ µû¶ó Á¶À۵˴ϴÙ.

    ¡¸¡èŰ¡¹¸¦ ´©¸£¸é ij¸¯ÅͰ¡ À̵¿ÇÑ´Ù¡¤¡¤¡¤¡¤°°Àº °Í
    ¡¸¡èŰ¡¹¸¦ ´­·ÈÀ» ¶§ ij¸¯ÅÍÀÇ ÁÂÇ¥¸¦ º¯°æ½Ã۸é Ç÷¹À̾îÀÇ ¶æ
    ¿¡ µû¶ó ij¸¯ÅͰ¡ ¿òÁ÷ÀÌ°Ô µË´Ï´Ù.

    »ùÇÿ¡´Â Ç÷¹À̾ ¡¸¡è¡¹ ¡¸¡é¡¹ ¡¸¡ç¡¹ ¡¸¡æ¡¹Å°¸¦ ´©¸£¸é
    ij¸¯ÅͰ¡ À̵¿Çϵµ·Ï µÇ¾î ÀÖ½À´Ï´Ù.

    Ç÷¹À̾î·ÎºÎÅÍÀÇ Å° ÀԷ¡¤¡¤¡¤¡¤Å°º¸µå »óŸ¦ ÃëµæÇÏ´Â ÇÔ¼ö´Â ¸î °³ ÀÖ½À´Ï´Ù¸¸
    ¿©±â¿¡´Â ¡¸GetKeyState ÇÔ¼ö¡¹·Î ¼ÂÆÃµÇ¾î ÀÖ½À´Ï´Ù.

    ÀÌ ÇÔ¼ö´Â ÆÄ¶ó¹ÌÅÍ·Î ÁöÁ¤µÈ¡¸°¡»ó ŰÄڵ塹ÀÇ »óŰ¡ ¾î¶»°Ô µÇ°í ÀÖ´ÂÁö¸¦ ¸®ÅÏÇÕ´Ï´Ù.
    ¡¸°¡»ó ŰÄڵ塹¶õ Űº¸µåÀÇ Å°¿¡ ÇÒ´çµÈ ÀÎ½Ä ÄÚµå °°Àº °ÍÀÔ´Ï´Ù.
    (¡¸windows.h¡¹¿¡¼­ ¸ÅÅ©·Î Á¤ÀǵǾî ÀÖ´Ù)
    A~Z±îÁöÀÇ Å°ÄÚµå´Â ¸ÅÅ©·ÎµÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡ ½º½º·Î Á¤ÀÇÇÑ´Ù

    ENTER ŰÀÇ °æ¿ì´Â
    GetKeyState(VK_RETURN)

    À§¿Í °°ÀÌ ÇÏ¸é ¡¸ENTER Ű(¸®ÅÏ Å°)¡¹°¡ ´­·ÁÁ³À» ¶§¿¡ ÇÔ¼öÀÇ
    ¸®ÅÏ °ªÀ¸·Î¼­ ¡¸Á¦ÀÏ À§ ºñÆ®¿¡ 1¡¹À» ¸®ÅÏÇÕ´Ï´Ù.
    ´­·ÁÁöÁö ¾Ê¾ÒÀ» ¶§´Â ¡¸Á¦ÀÏ¹Ø ºñÆ®¿¡ 1¡¹ÀÌ ¸®Åϵ˴ϴÙ.

    ¸®ÅÏ °ªÀº ¡¸4¹ÙÀÌÆ®(16ºñÆ®)¡¹ÀÔ´Ï´Ù.

    ¡¸ Á¦ÀÏÀ§°¡ 1¡¹À̶ó°í ÇÏ´Â °ÍÀº ¡¸10000000000000000¡¹£¼Å°°¡ ´­¸®°í ÀÖÀ» ¶§
    16 Áø¼ö·Î ¡¸8000¡¹ÀÔ´Ï´Ù.
    ÀÌ °ª°ú¡¸ºñÆ® ´ÜÀ§ÀÇ AND 󸮡¹¸¦ ÇÕ´Ï´Ù.
    >

    if(GetKeyState(VK_WNTER) &0x8000)

    ¡¸ºñÆ® ´ÜÀ§ÀÇ AND 󸮡¹ÀÔ´Ï´Ù.
    ¡¸&¿¬»êÀÚ¡¹¶ó°í »ç¿ëÇÏ´Â °ÍÀ¸·Î °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ¸¸¾à Ç÷¹À̾ ENTER ۸¦ ´©¸£°í ÀÖÀ¸¸é ¡¸GetKeyState¡¹¿¡´Â
    ¡¸10000000000000000(16ÁøÀ̶ó¸é 8000)¡¹°¡ ¸®Åϵ˴ϴÙ.
    ±×°Í°ú ¡¸10000000000000000(16ÁøÀ̶ó¸é 8000)¡¹´Â AND·Î ¡¸1¡¹À̶ó¸é
    ±× ۰¡ ´­¸®°í ÀÖ´Ù´Â Àǹ̰¡ µÇ´Â °ÍÀÔ´Ï´Ù.

    µ¡ºÙ¿©¼­ 16ÁøÀÇ ¡¸8000¡¹ÀÇ Àü¿¡ ÀÖ´Â ¡¸0 x¡¹´Â µÚÀÇ °ªÀÌ 16ÁøÀÓÀ» ¾Ë·ÁÁÖ´Â ¿¬»êÀÚÀÔ´Ï´Ù

    void KeyIvent(void)
    {
        if( (GetKeyState(VK_UP) & 0x8000))        ypos-=4//¡è
        if( (GetKeyState(VK_DOWN) & 0x8000))    ypos+=4//¡é
        if( (GetKeyState(VK_RIGHT) & 0x8000))    xpos+=4//¡æ
        if( (GetKeyState(VK_LEFT) & 0x8000))    xpos-=4//¡ç
    }

    ÀÌ ¡¸KeyIvent ÇÔ¼ö¡¹´Â »õ·Ó°Ô Ãß°¡µÈ ij¸¯ÅÍ À̵¿À» ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.
    ÀÌ ÇÔ¼ö´Â ¡¸loop ÇÔ¼ö¡¹ÀÇ °è»ê 󸮸¦ Çϰí ÀÖ´Â Áß¿¡ È£ÃâµÇ°í ÀÖ½À´Ï´Ù

    ó¸®ÀÇ ³»¿ëÀº Áö±ØÈ÷ ´Ü¼øÇØ ´­¸° ¹æÇâÀ¸·Î ³ª¾Æ°¡°Ô Çϱâ À§ÇØ Ä³¸¯ÅÍ ÁÂÇ¥ÀÇ °ª
    ÀÇ º¯È­¿¡ µû¸¥ ó¸®ÀÔ´Ï´Ù.

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    Ŭ¸³ÇÎ

    ¿©Å±îÁö »ùÇÿ¡¼­ À̹ÌÁö°¡ È­¸é ³¡À» ¹þ¾î³ª¸é ij¸¯ÅͰ¡ È­¸é¿¡¼­
    »ç¶óÁ® ¹ö¸³´Ï´Ù.
    À̰ÍÀº¡¸Å¬¸³ ¿µ¿ª¡¹À» ¼³Á¤ÇÏ¸é »ç¶óÁöÁö ¾Ê°Ô ÇÒ¼ö ÀÖ½À´Ï´Ù.

    È帧Àº °ÅÀÇ À§ÀÇ ±×¸²°ú °°½À´Ï´Ù.
    ¿ì¼± ¡¸DirectDrawCliper ¿ÀºêÁ§Æ®¡¹¸¦ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.
    ÀÌ ¿ÀºêÁ§Æ®ÀÇ ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ ÇÊ¿ä·Î ÇÏ´Â Æ÷ÀÎÅ͸¦ º°µµ·Î ÁغñÇÕ´Ï´Ù.

    ¡¸DirectDrawCliper ¿ÀºêÁ§Æ®¡¹ÀÇ Æ÷ÀÎÅÍ´Â
    ¡¸LPDIRECTDRAWCLIPPER¡¹·Î Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
    LPDIRECTDRAWCLIPPER LpClip//Ŭ¸³ ¿ÀºêÁ§Æ® Æ÷ÀÎÅÍ

    »ùÇÿ¡¼­´Â ¡¸global.h¡¹¿¡¼­ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
    Æ÷ÀÎÅ͸¦ ÁغñÇßÀ¸¸é, ¡¸DirectDrawCliper ¿ÀºêÁ§Æ®¡¹¸¦ »ý¼ºÇÕ´Ï´Ù.
    ÀÌ ¿ÀºêÁ§Æ®´Â ¡¸DRAW ¿ÀºêÁ§Æ®¡¹ÀÇ ¡¸CreateClipper ¸Þ¼Òµå¡¹·Î »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

    »ùÇÿ¡¼­´Â ¡¸BOOL CreateDraw(HWND hwnd)¡¹¿¡¼­ ±× 󸮸¦ Çϰí ÀÖ½À´Ï´Ù.
    ¡¸Draw ¿ÀºêÁ§Æ®¡¹¸¦ »ç¿ëÇϹǷΠ¡¸Draw ¿ÀºêÁ§Æ®¡¹°¡ »ý¼ºµÈ ÈÄ¿¡ ó¸®ÇÒ
    Çʿ䰡 ÀÖ½À´Ï´Ù.

    dd->CreateClipper(0, &LpClip, NULL);

    Á¦ÀÏ ÆÄ¶ó¹ÌÅÍ£º»ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î Ç×»ó ¡¸0¡¹À» °Ç³×ÁÝ´Ï´Ù.
    Á¦2 ÆÄ¶ó¹ÌÅÍ£ºÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¼Ò¸¦ º¸°ü, À¯ÁöÇÏ´Â Æ÷ÀÎÅÍ
    Á¦3 ÆÄ¶ó¹ÌÅÍ£ºÈ®Àå ÆÄ¶ó¹ÌÅÍ·Î DirectX5¿¡¼­´Â ¡¸NULL¡¹À̿ܶó¸é ¿¡·¯°¡ ¹ß»ýµË´Ï´Ù

    ÆÄ¶ó¹ÌÅÍ´Â ¡¸Á¦2 ÆÄ¶ó¹ÌÅÍ¡¹¸¸ÀÌ Áß¿äÇÕ´Ï´Ù.
    ¿©±â¿¡´Â ¹æ±Ý Àü Á¤ÀÇÇÑ ¿ÀºêÁ§Æ®ÀÇ Æ÷ÀÎÅ͸¦ °Ç³×ÁÝ´Ï´Ù.
    À̰ÍÀ¸·Î ¡¸DirectDrawCliper ¿ÀºêÁ§Æ®¡¹°¡ »ý¼ºµÆ½À´Ï´Ù.

    ±×·³ Ŭ¸³ ¿ÀºêÁ§Æ®°¡ »ý¼ºµÇ¾úÀ¸¹Ç·Î ¿µ¿ªÀ» ¼³Á¤ÇØ ¼­ÆäÀ̽º¿¡ °Ç³×ÁÖ´Â ÀÛ¾÷À» ÇսôÙ.
    ÀÌ Å¬¸³ ±â´ÉÀ» »ç¿ëÇÏ¸é ¼­ÆäÀ̽º»ó¿¡ º¹¼öÀÇ Å¬¸³ ¿µ¿ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸³ª,
    ¿©±â¿¡¼­´Â 640¡¿480(¹¦È­ ¿µ¿ªÀüü)À» Ŭ¸³ ¿µ¿ªÀ¸·Î ÇսôÙ.

    ¸¸¾à ¹¦È­ ¿µ¿ªÀüüÀܸ̿¦ Ŭ¸³ ¿µ¿ªÀ¸·Î¼­ ¼³Á¤ÇÏ°í ½ÍÀº °æ¿ì´Â ½º½º·Î ÇÏ½Ã±æ ¹Ù¶ø´Ï´Ù.
    ÀÌ Å¬¸³ ±â´ÉÀÇ Ã³¸®´Â ¹«°Å¿ì¹Ç·Î Ŭ¸³ ¿ÀºêÁ§Æ®¿¡ ¸Ã±â´Â °Íº¸´Ù ½º½º·Î Ŭ¸³ ¿µ¿ªÀ» ½º½º·Î ÇÁ·Î±×·¥(ÁöÁ¤)ÇÏ´Â °ÍÀÌ °í¼ÓÀ̱⠶§¹®ÀÔ´Ï´Ù.

    ¿©±â¼­ ÇϳªÀÇ Å¬¸³ ¿ÀºêÁ§Æ®ÀÇ ¼Ò°³¸¦ ÇßÀ¸³ª ¾îµð±îÁö³ª ÇϳªÀÇ ¿¹ÀÏ »ÓÀÔ´Ï´Ù.

    if(LpClip->SetHWnd( 0, hwnd )!= DD_OK)
        return FALSE;

    Ŭ¸³ ¿ÀºêÁ§Æ®°¡ »ý¼ºµÇ¸é ¹Ù·Î ¿ÀºêÁ§Æ®ÀÇ ¡¸SetHWnd ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é ±× À©µµ¿ì ÇÚµé(hwnd)ÀÇ ¿µ¿ªÀ» Ŭ¸³ ¿µ¿ªÀ¸·Î
    ¿ÀºêÁ§Æ®¿¡ µî·ÏÇØ ÁÝ´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅÍ£ºÇ×»ó 0ÀÔ´Ï´Ù
    Á¦2 ÆÄ¶ó¹ÌÅÍ£ºÀ©µµ¿ì ÇÚµéÀ» °Ç³×ÁÝ´Ï´Ù.

    ¸¸¾à Ŭ¸³ ¿µ¿ªÀ» ÀÓÀÇÀÇ À§Ä¡·Î ÇÏ°í ½ÍÀº °æ¿ì´Â ¡¸setClipList ¸Þ¼Òµå¡¹
    ¿¡ ¿µ¿ªÀÇ »çÀÌÁ °Ç³×ÁÝ´Ï´Ù.

    ±×¸®°í ¸¶Áö¸·¿¡¡¤¡¤¡¤¡¤¡¤

    if(BackSurface->SetClipper(LpClip) !=DD_OK)
        return FALSE//¼­ÆäÀ̽º¿¡ Ŭ¸³ ¼ÂÆÃ

    ¡¸SetClipper ¸Þ¼Òµå¡¹¸¦ »ç¿ë ¼­ÆäÀ̽º¿¡ Ŭ¸³ ¿µ¿ªÀ» ¼³Á¤ÇÕ´Ï´Ù.
    ÆÄ¶ó¹ÌÅÍ´Â ¡¸Å¬¸®ÆÛ ¿ÀºêÁ§Æ® ÀÎÅÍÆäÀ̽º¡¹ÀÇ Æ÷ÀÎÅÍÀÔ´Ï´Ù.

    ¹é¼­ÆäÀ̽º¿¡ Ŭ¸³ ¿µ¿ªÀ» ¼¼Æ® ÇÕ´Ï´Ù
    ´ë»óÀÌ ¡¸¹é¼­ÆäÀ̽º¡¹¶ó°í ÇÏ´Â °Í¿¡ ÁÖÀÇÇϽʽÿÀ.

    ¹¦È­ ÇÔ¼ö ¡¸Blt ¸Þ¼Òµå¡¹·Î ¹¦È­¸¦ ½Ç½ÃÇÏ´Â ¼­ÆäÀ̽º´Â ¡¸¹é¼­ÆäÀ̽º¡¹À̹ǷÎ
    ¡¸ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¡¹¿¡ Ŭ¸³ ¿µ¿ªÀ» ¼³Á¤Çصµ Àǹ̰¡ ¾ø½À´Ï´Ù.

    º¸Ãæ
    Ŭ¸³ ±â´ÉÀº ¡¸Blt ¸Þ¼Òµå¡¹·Î ¹Û¿¡ È¿°ú¸¦ ¹ßÈÖÇÏÁö ¾Ê±â ¶§¹®¿¡ ij¸¯ÅÍÀÇ ¹¦È­¸¦ Çϴ¡¸BltFast¡¹¿¡¼­ ¡¸Blt¡¹·Î º¯°æµÇ¾î ÀÖ½À´Ï´Ù.

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////

    È®´ë, Ãà¼Ò ¹¦È­

    Àü¼Û ¸Þ¼ÒµåÀÎ ¡¸Blt¡¹¸¦ »ç¿ëÇϸé È®´ë¡¤Ãà¼Ò ¹¦È­°¡ °£´ÜÇÕ´Ï´Ù.
    À̰ÍÀº ¡¸Blt¡¹ÀÇ ÆÄ¶ó¹ÌÅ͸¸À¸·Î ÇÒ ¼ö ÀÖÀ¸¹Ç·Î °£´ÜÇÕ´Ï´Ù.

    HRESULT Blt(
        LPRECT lpDestRect,
        LPDIRECTDRAWSURFACE3 lpDDSrcSurface,
        LPRECT lpSrcRect,
        DWORD dwFlags,
        LPDDBLTFX lpDDBltFx
    );

    ¡¸Blt ¸Þ¼Òµå¡¹ÀÇ ÆÄ¶ó¹ÌÅÍ´Â À§¿¡ ÀÖ´Â ´ë·Î ÀÔ´Ï´Ù.
    È®´ë Ãà¼Ò¸¦ ½Ç½ÃÇÏ´Â ÆÄ¶ó¹ÌÅÍ´Â Á¦1 ÆÄ¶ó¹ÌÅÍÀ̹ǷΠÀÌ ÆÄ¶ó¹ÌÅ͸¦ ¹Ù²Ù´Â °ÍÀ¸·Î È®´ë Ãà¼Ò°¡ °¡´ÉÇÏ°Ô µË´Ï´Ù.

    32¡¿32 µµÆ®ÀÇ À̹ÌÁöÀÇ °æ¿ì

    º¸Åë ¹¦È­(Å©±â´ë·Î)

    Á¦1 ÆÄ¶ó¹ÌÅÍÀÇ RECT ±¸Á¶Ã¼ÀÇ °ªÀ»¡¤¡¤¡¤¡¤

    RECT.LEFT=0;
    RECT.TOP=0;
    RECT.RIGHT=31;
    RECT.BOTTOM=31;

    32 µµÆ®´Â 0~31±îÁö·Î 32 µµÆ®ÀÔ´Ï´Ù

    È®´ë ¹¦È­

    Á¦1 ÆÄ¶ó¹ÌÅÍÀÇ RECT ±¸Á¶Ã¼ÀÇ °ªÀ»¡¤¡¤¡¤¡¤
    RECT.LEFT=0;
    RECT.TOP=0;
    RECT.RIGHT=31º¸´Ù À§ÀÇ °ª;
    RECT.BOTTOM=31º¸´Ù À§ÀÇ °ª;

    Ãà¼Ò ¹¦È­

    Á¦1 ÆÄ¶ó¹ÌÅÍÀÇ RECT ±¸Á¶Ã¼ÀÇ °ªÀ»¡¤¡¤¡¤¡¤

    RECT.LEFT=0;
    RECT.TOP=0;
    RECT.RIGHT=31º¸´Ù ¾Æ·¡ÀÇ °ª;
    RECT.BOTTOM=31º¸´Ù ¾Æ·¡ÀÇ °ª;

    Âü°í·Î Á¦1 ÆÄ¶ó¹ÌÅ͸¦ ¡¸null¡¹·Î Çϸé È­¸é Àüü¿¡ È®´ë ¹¦È­ µË´Ï´Ù.
    Á¦1 ÆÄ¶ó¹ÌÅ͸¦ µ¿ÀûÀ¸·Î º¯È¯½Ã۸é Á¶±Ý¾¿ È®´ë³ª Ãà¼ÒÇÏ´Â °Íµµ °¡´ÉÇÏ°Ô µË´Ï´Ù.

    ///////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////

    È­¸é È¿°ú

    À̹øÀº È­¸éÀ» ÁöÁ¤ÇÑ »öÀ¸·Î ÀüºÎ ÆäÀÎÆ®Çϴ ó¸®¸¦ ½Ç½ÃÇսôÙ.
    ¾îµåº¥ÃÄ °ÔÀӵ¼­ »ç¿ëµÇ´Â ¡¸ÆäÀÌµå¾Æ¿ô¡¹ÀÔ´Ï´Ù.

    À§ÀÇ °°Àº È­¸é È¿°ú¸¦ º¸½ÅÀûÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù.
    °ËÀº ºÎºÐ(ÀüºÎ Ä¥ÇØÁø ºÎºÐ)ÀÌ ¼­¼­È÷ ÆÛÁ®°¡ È­¸éÀÌ ¾îµÓ°Ô µÇ´Â
    È­¸é È¿°úÀÔ´Ï´Ù.
    ÀÌ È¿°ú´Â¡¸All Paint¡¹¸¦ ¼ÂÆÃÇÏ¸é °£´ÜÇÏ°Ô °¡´ÉÇÕ´Ï´Ù.

    ¿ì¼±Àº Ű ÄÚµåÀÇ Á¤ÀǸ¦ ¸ðµÎ ÇÕ´Ï´Ù.

    #define VK_A 0x41     //aŰ
    #define VK_B 0x42     //bŰ
    #define VK_C 0x43     //cŰ
    #define VK_D 0x44     //dŰ
    #define VK_E 0x45     //eŰ
    #define VK_F 0x46     //fŰ
    #define VK_G 0x47     //gŰ
    #define VK_H 0x48     //hŰ
    #define VK_I 0x49     //iŰ
    #define VK_J 0x4A     //jŰ
    #define VK_K 0x4B     //kŰ
    #define VK_L 0x4C     //lŰ
    #define VK_M 0x4D    //mŰ
    #define VK_N 0x4E     //nŰ
    #define VK_O 0x4F     //oŰ
    #define VK_P 0x50     //pŰ
    #define VK_Q 0x51     //qŰ
    #define VK_R 0x52     //rŰ
    #define VK_S 0x53     //sŰ
    #define VK_T 0x54     //tŰ
    #define VK_U 0x55     //uŰ
    #define VK_V 0x56     //vŰ
    #define VK_W 0x57    //wŰ
    #define VK_X 0x58     //xŰ
    #define VK_Y 0x59     //yŰ
    #define VK_Z 0x5A     //zŰ


    ALL PAINTING ¹æ¹ý

    ¡¸Blt ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.
    ¡¸Blt ¸Þ¼Òµå¡¹´Â À̹ÌÁö Àü¼Ûµµ ÇÏÁö¸¸, ±¸ÇüÀ» ÀüºÎ ÆäÀÎÆ®ÇÏ´Â ±â´Éµµ ÀÖ½À´Ï´Ù.

    HRESULT Blt(

        LPRECT lpDestRect,
        //Àü¼ÛÇÒ °÷ÀÇ ¼­ÆäÀ̽ºÀÇ ¹¦È­ À§Ä¡(RECT ±¸Á¶Ã¼)

        LPDIRECTDRAWSURFACE3 lpDDSrcSurface,
        //Àü¼ÛÇØ ¿Ã °÷ÀÇ ¼­ÆäÀ̽º

        LPRECT lpSrcRect,
        //Àü¼ÛÇØ ¿Ã °÷ÀÇ ¼­ÆäÀ̽ºÀÇ Àü¼Û ¿µ¿ª(RECT ±¸Á¶Ã¼)

        DWORD dwFlags,        
        //Àü¼Û Ç÷¡±×

        LPDDBLTFX lpDDBltFx
        //Ç÷¡±×¿¡ ÀÇÇØ ÀÌ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÑ´Ù

    );

    Blt ¸Þ¼ÒµåÀÇ ÆÄ¶ó¹ÌÅÍ´Â À§¿¡ ÀÖ´Â ´ë·Î ÀÔ´Ï´Ù.

    (ÇïÇÁÂüÁ¶)

    ALL PAINT¿¡¼­ Áß¿äÇÑ °ÍÀº Á¦4 ÆÄ¶ó¹ÌÅÍ¿Í Á¦5 ÆÄ¶ó¹ÌÅÍÀÔ´Ï´Ù.
    Ç÷¡±×¾È¿¡ ¡¸DDBLT_COLORFILL¡¹¶ó°í ÇÏ´Â Ç÷¡±×°¡ ÀÖ½À´Ï´Ù.
    À̰ÍÀº Á¦5 ÆÄ¶ó¹ÌÅÍ·Î °Ç³×ÁÖ´Â ¡¸DDBLTFX ±¸Á¶Ã¼¡¹¿¡ °Ý³³µÈ ¡¸Ä÷¯¡¹
    ¸¦ »ç¿ëÇØ Àü¼ÛÇÒ °÷ÀÇ ¼­ÆäÀ̽º¸¦ All Paint ÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.

    ÀÌ Ç÷¡±×¸¦ Á¦4 ÆÄ¶ó¹ÌÅÍ·Î ¼³Á¤ÇÔÀ¸·Î ¡¸Blt ¸Þ¼Òµå¡¹´Â ALL PAINT ±â´ÉÀÌ µË´Ï´Ù.
    BackSurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);

    À§´Â È­¸é Àüü¸¦ ALL PAINTINGÇÒ ¶§ÀÇ ¡¸Blt ¸Þ¼Òµå¡¹»ç¿ë ¿¹ÀÔ´Ï´Ù.

    DDBLTFX ±¸Á¶Ã¼

    PaintÀÇ Ä÷¯¸¦ °Ý³³¸¸À» ÇÏ´Â ±¸Á¶Ã¼°¡ ¾Æ´Ï°í ¿©·¯ °¡Áö ¿ëµµ¿¡ »ç¿ëµÇ´Â ±¸Á¶Ã¼ÀÔ´Ï´Ù.
    (ÇïÇÁÂüÁ¶)

    ¿©±â¼­ Áß¿äÇÑ ¸â¹ö´Â ¡¸dwFillColor¡¹ÀÔ´Ï´Ù.
    ÀÌ ¸â¹ö¿¡ ALL PAINTINGÇÏ´Â Ä®¶ó°ªÀ» °Ý³³ÇØ Blt ¸Þ¼Òµå¿¡ °Ç³×ÁÝ´Ï´Ù.

    »ç¿ë¿¹

    DDBLTFX         ddbltfx;
    ddbltfx.dwSize=sizeof(ddbltfx);
    ddbltfx.dwFillColor=0;
    BackSurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);

    À§´Â È­¸é Àüü¿¡ All PaintingÇÒ ¶§ÀÇ ±¸Ã¼ÀûÀÎ ¿¹ÀÔ´Ï´Ù.
    ÀÌ Ã³¸®´Â Áö³­ ¹ø¿¡¼­´Â ¼­ÆäÀ̽º ÃʱâÈ­·Î »ç¿ëµÇ°í ÀÖ¾ú½À´Ï´Ù.

    (render ÇÔ¼ö·Î ¼­ÆäÀ̽º¸¦ BLACKÀ¸·Î All PaintingÇØ¼­ ¾²·¹±âÀ̹ÌÁö°¡ Ç¥½ÃµÇÁö ¾Ê°Ô Çϴ ó¸®ÀÔ´Ï´Ù)

    ±×·± ´ÙÀ½ ¼­ÆäÀ̽ºÀÇ ¾î´À ºÎºÐÀ» All PaintingÇÒ±î?±× °ªÀ» RECT ±¸Á¶Ã¼¿¡ °Ý³³ÇØ
    Blt ·Î ÆäÀÎÆ®ÇÕ´Ï´Ù.

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////

    ¹®ÀÚ ¹¦È­
    ¿©±â¼­´Â È­¸é¿¡ ij¸¯ÅÍ ¶óÀÎÀ» ¹¦È­¸¦ ÇÕ´Ï´Ù.

    À§¿Í °°ÀÌ Ä³¸¯ÅÍ ¶óÀÎÀÇ ¹¦È­°¡ °¡´ÉÇÕ´Ï´Ù.
    Çϳª´Â ¹®ÀÚÀÇ ¹è°æÀÌ Åõ°ú Çϰí ÀÖÁö ¾Ê´Â ij¸¯ÅÍ ¶óÀΡ¤¡¤¡¤¡¤

    ¶Ç Çϳª´Â Åõ°ú ÇØ ¹¦È­ ÇÒ ¼ö Àִ ij¸¯ÅÍ ¶óÀÎÀÔ´Ï´Ù.
    Åõ°ú ÇÒ ¼ö Àִ ij¸¯ÅÍ ¶óÀÎÀÌ °ÔÀÓ¿¡¼­ º¸´Ù ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.

    ±×·¯³ª Åõ°úµÇ´Â ÂÊÀÇ Ã³¸®°¡ Á¶±Ý º¹ÀâÇÕ´Ï´Ù.

    Ãß°¡µÈ ºÎºÐÀº ¡¸void render(void)¡¹ºÎºÐÀÔ´Ï´Ù.
    Åõ°ú ÇÏÁö ¾Ê´Â ¹¦È­

    HDC     hdc;
    BackSurface->GetDC(&hdc);
    //¹é ¹öÆÛÀÇ µð¹ÙÀ̽º ÄÜÅØ½ºÆ® Ãëµæ
    SetBkColor(hdc, 0);
    //µð¹ÙÀ̽º ÄÜÅØ½ºÆ®·Î ÁöÁ¤»öÀ» ¼ÂÆÃ
    SetTextColor(hdc, RGB(255,255,255));
    //¹®ÀÚÀÇ »öÀ» ¼ÂÆÃ
    TextOut(hdc, 300,280," Å×½ºÆ®~", 8);
    //ij¸¯ÅÍ ¶óÀΠǥ½Ã
    BackSurface->ReleaseDC(hdc);
    //µð¹ÙÀ̽º ÄÜÅØ½ºÆ® ÇØ¹æ
    󸮴 À§¿Í °°ÀÌ µË´Ï´Ù.

    HDC     hdc;
    µð¹ÙÀ̽º ÄÜÅØ½ºÆ®(ÀÌÇÏ£ºDC)°¡ ÇÊ¿äÇÏ°Ô µÇ¹Ç·Î ¿©±â¼­ Á¤ÀÇÇÕ´Ï´Ù.

    BackSurface->GetDC(&hdc);
    ¹¦È­ ´ë»óÀÎ ¼­ÆäÀ̽º¡¤¡¤¡¤¡¤¹é ¹öÆÛÀÇ DC¸¦ ¾òÀ¸·Á¸é, ¹é ¹öÆÛÀÇ ¡¸GetDC ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.

    ÆÄ¶ó¹ÌÅÍ´Â DC¿¡ÀÇ ÁÖ¼ÒÀÔ´Ï´Ù.
    SetBkColor(hdc, 0);
    ÀÌ ÇÔ¼ö´Â ÁöÁ¤ÇÑ DCÀÇ ¹è°æÀ» All PaintÇÕ´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅͰ¡ ¹è°æ¿¡ All PaintÇÏ°í ½ÍÀº DC.
    Á¦2 ÆÄ¶ó¹ÌÅͰ¡ All PaintÇÏ´Â Ä÷¯ÀÔ´Ï´Ù.

    SetTextColor(hdc, RGB(255,255,255));
    ÁöÁ¤ÇÑ DCÀÇ ÅØ½ºÆ® Ä÷¯¸¦ º¯°æÇÕ´Ï´Ù.
    ÆÄ¶ó¹ÌÅÍ´Â ¡¸SetBkColor¡¹¿Í °°½À´Ï´Ù.

    TextOut(hdc, 300,280," Å×½ºÆ®~", 8);
    DC°¡ °¡¸®Å°´Â ¸Þ¸ð¸® ¿µ¿ª¿¡ ¹¦È­¸¦ ½Ç½ÃÇÕ´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅÍ£ºµð¹ÙÀ̽º ÄÜÅØ½ºÆ®
    Á¦2 ÆÄ¶ó¹ÌÅÍ£º¹¦È­ÇÒ °÷ XÁÂÇ¥
    Á¦3 ÆÄ¶ó¹ÌÅÍ£º¹¦È­ÇÒ °÷ YÁÂÇ¥
    Á¦4 ÆÄ¶ó¹ÌÅÍ£º¹¦È­ÇÒ Ä³¸¯ÅÍ ¶óÀÎÀÇ Æ÷ÀÎÅÍ
    Á¦5 ÆÄ¶ó¹ÌÅÍ£º¹¦È­ÇÒ ¹®ÀÚ¼ö

    BackSurface->ReleaseDC(hdc);
    ¿©±â¼­ DC´Â ºÒÇÊ¿äÇÏ°Ô µÇ¹Ç·Î ÇØ¹æ 󸮸¦ ÇÕ´Ï´Ù.
    ÇØ¹æµµ ¼­ÆäÀ̽ºÀÇ ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.
    ¡¸ReleaseDC¡¹°¡ ÇØ¹æÀÇ ¸Þ¼ÒµåÀÔ´Ï´Ù.
    ÆÄ¶ó¹ÌÅÍ´Â DCÀÔ´Ï´Ù

    À̰ÍÀ¸·Î ¹®ÀÚ¸¦ ¹¦È­ ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.
    ±×·¯³ª À̰ÍÀº ¡¸Åõ°ú ÇÏÁö ¾Ê´Â´Ù¡¹ °ÍÀ¸·Î ¿ëµµ°¡ ²Ï ÇÑÁ¤µÇ¾î ÀÖ½À´Ï´Ù.
    ´ÙÀ½À¸·Î Åõ°ú µÇ´Â ij¸¯ÅÍ ¶óÀÎ ¹¦È­¸¦ ½Ç½ÃÇÕ´Ï´Ù(½ºÇÁ¶óÀÌÆ®).

    Åõ°ú ÇÏ´Â ¹¦È­(½ºÇÁ¶óÀÌÆ® ¹¦È­)
    ¹«¾ùÀΰ¡ ¾î·Á¿ï °Í °°Àº Åõ°úµÇ´Â ij¸¯ÅÍ ¶óÀÎÀÇ ¹¦È­ÀÔ´Ï´Ù¸¸ API ÇÔ¼ö·Î °¡´ÉÇÕ´Ï´Ù.
    °Ô´Ù°¡ Åõ°ú ÇÏÁö ¾Ê´Â ij¸¯ÅÍ ¶óÀÎ ¹¦È­¿Í ±×´ÙÁö ´Ù¸¥Á¡Àº ¾ø½À´Ï´Ù.

    HDC     Fhdc;
    char str[]={"½ºÇÁ¶óÀÌÆ®È¿°ú Å×½ºÆ®!!"};
    BackSurface->GetDC(&Fhdc);
    //¹é ¹öÆÛÀÇ µð¹ÙÀ̽º ÄÜÅØ½ºÆ® Ãëµæ
    SetBkMode(Fhdc, TRANSPARENT);
    //µð¹ÙÀ̽º ÄÜÅØ½ºÆ®·Î ÁöÁ¤»öÀ» ¼ÂÆÃ
    SetTextColor(Fhdc, RGB(250,250,250));
    //¹®ÀÚÀÇ »öÀ» ¼ÂÆÃ
    TextOut(Fhdc, 120,120, str, strlen(str));
    //ij¸¯ÅÍ ¶óÀΠǥ½Ã
    BackSurface->ReleaseDC(Fhdc);
    //µð¹ÙÀ̽º ÄÜÅØ½ºÆ® ÇØ¹æ

    Áß¿äÇÑ Ãß°¡Á¡Àº ÁøÇÑ ¹®ÀÚ·Î µÇ¾îÀÖ´Â ºÎºÐÀÔ´Ï´Ù.
    Åõ°ú ÇÏÁö ¾Ê´Â ¹®ÀÚ ¹¦È­ÀÇ °æ¿ì´Â ¡¸SetBkColor ÇÔ¼ö¡¹¿´½À´Ï´Ù.
    ÀÌ ÇÔ¼ö´Â ¹è°æ»öÀ» ¼³Á¤ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù¸¸,
    À̹ø »ç¿ëÇÏ´Â ¡¸SetBkMode¡¹´Â ÆÄ¶ó¹ÌÅÍ¿¡ ¹è°æÀ» Åõ°úÇÏ´Â ÆÄ¶ó¹ÌÅͰ¡ ÀÖ½À´Ï´Ù.

    Á¦2 ÆÄ¶ó¹ÌÅÍÀÇ ¡¸TRANSPARENT¡¹°¡ ±×°ÍÀÔ´Ï´Ù.
    À̰ÍÀ» °Ç³×ÁÖ°í ¹¦È­ ÇÒ ¶§, ¹¦È­ÇÒ °÷ÀÇ ¹è°æÀ» ³²±â¸é¼­ ¹®ÀÚ¸¦ ¹¦È­ÇÏ°Ô µË´Ï´Ù.
    ±× ¿ÜÀÇ º¯°æÀº ±×´ÙÁö ÁÖÀÇÇÏÁö ¾ÊÀ¸¼Åµµ ±¦Âú½À´Ï´Ù.
    ij¸¯ÅÍ ¶óÀÎÀ» º¯¼ö·ÎºÎÅÍ Àаí ÀÖ´Â °Í°ú ¹®ÀÚ¼ö¸¦ ÇÔ¼ö·Î ¿ä±¸Çϰí ÀÖ´Â µî¡¤¡¤¡¤´ë¼ö·ÓÁö ¾ÊÀº °ÍÀÔ´Ï´Ù.

    ¾î¶®½À´Ï±î?
    ij¸¯ÅÍ ¶óÀÎÀÇ ¹¦È­´Â ÀÌÇØÇÒ ¼ö ÀÖ¾ú´ÂÁö¿ä?

    ±×·¸Áö¸¸, WindowsÀÇ ½Ã½ºÅÛ ÆùÆ®´Â °ÔÀÓ¿¡ ¸ÂÁö ¾Ê´Â´Ùµç°¡ ¾È ¾î¿ï¸°´Ù°í
    »ý°¢ÇÏÁö ¾Ê½À´Ï±î?

    °¡´ÉÇÏ´Ù¸é ÆùÆ®¸¦ ½º½º·Î ¸¸µéµµ·Ï ÇսôÙ. À̹ÌÁö·Î¼­ ÆùÆ®¸¦ ÁغñÇØ ¹¦È­ Çϸé
    ÈÙ¾À º¸±â ÁÁÀ» °ÍÀ̶ó »ý°¢ÇÕ´Ï´Ù.

    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////

    Ä®¶ó Ű

    Ä®¶ó Ű´Â À̹ÌÁö¿¡ ÀÖ´Â Ä®¶ó¸¦ ¹«È¿·Î ÇØ¼­ ¡¸½ºÇÁ¶óÀÌÆ®¡¹¸¦ °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
    (¼±ÅÃÇÑ Ä®¶ó°¡ Åõ¸íó¸® µÈ´Ù = ½ºÇÁ¶óÀÌÆ®)

    ÀÌ Ã³¸®´Â »ùÇÿ¡¼­ ¡¸loadbmp ÇÔ¼ö¡¹·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.
    ¿©±â¼­ ±×¡¸Ä®¶ó Ű¡¹¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.

    Ä®¶ó Ű¼ÂÆÃ

    Ä®¶ó Ű´Â ¼­ÆäÀ̽º¿¡ ´ëÇØ¼­ ¼³Á¤ÀÌ °¡´ÉÇÕ´Ï´Ù.
    »ùÇÃÀÇ ¡¸loadbmp ÇÔ¼ö¡¹´Â ÁöÁ¤ÇÑ BMP ÆÄÀϰú °°Àº »çÀÌÁîÀÇ ¼­ÆäÀ̽º¸¦
    »ý¼ºÇؼ­¡¤¡¤¡¤¡¤±× ¼­ÆäÀ̽º¿¡ Ä®¶ó ۸¦ ¼ÂÆÃÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

    DDSURFACEDESC2         ddsd;
    memset(&ddsd, 0, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);

    //¼­ÆäÀ̽º¸¦ Àá±Þ´Ï´Ù

    surface->Lock(NULL, &ddsd, DDLOCK_WAIT |
    DDLOCK_SURFACEMEMORYPTR, NULL);

    char     *p=(char *) ddsd.lpSurface;        
    //Á»ó°¢ÀÇ Ä®¶ó¸¦ Åõ°úÄ®¶ó·Î ÇÕ´Ï´Ù

    DWORD transparent=*(DWORD *) p;

    //¼­ÆäÀ̽ºÀÇ ·ÏÀ» ÇØÁ¦ÇÕ´Ï´Ù
    surface->Unlock(NULL);             // Åõ°úÄ®¶óÀÇ ¼³Á¤
    DDCOLORKEY    ddck;
    ddck.dwColorSpaceLowValue=transparent;
    ddck.dwColorSpaceHighValue=transparent;
    surface->SetColorKey(DDCKEY_SRCBLT, &ddck);

    À§´Â ¡¸loadbmp ÇÔ¼ö¡¹ÀÇ Ä®¶ó Ű¼Â ó¸®ÀÇ ÇàÀÔ´Ï´Ù.
    ¡¸¼­ÆäÀ̽º Á÷Á¢ ¾ï¼¼½º¡¹ ¹æ¹ýÀ¸·Î À̹ÌÁöÀÇ Á»ó 1µµÆ®ÀÇ Ä®¶ó¸¦
    Ä®¶ó Ű·Î¼­ ¼ÂÆÃÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

    ¡¸¼­ÆäÀ̽º Á÷Á¢ ¾ï¼¼½º¡¹´Â ¾ÆÁ÷ ¼³¸íÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¸ð¸£´Â °ÍÀÌ
    ´ëºÎºÐÀ̰ÚÁö¸¸ ¡¸¼­ÆäÀ̽º¡¹ÀÇ Á»ó 1 µµÆ®ÀÇ Ä®¶óÁ¤º¸¸¦ ÃëµæÇÏ´Â ÀÛ¾÷À» ½Ç½ÃÇØ¼­
    (Á÷Á¢ ¾ï¼¼½º´Â ¿©·¯°¡Áö ÀÏÀÌ »ý±ä´Ù)
    ÃëµæÇÑ Ä®¶óÁ¤º¸¸¦ ¡¸DDCOLORKEY ±¸Á¶Ã¼¡¹¿¡ °Ç³×ÁÖ¾î ¼­ÆäÀ̽º¿¡¼­
    ¡¸SetColorKey ¸Þ¼Òµå¡¹¸¦ ¼ÂÆÃÇÕ´Ï´Ù.

    À̹øÀº ¡¸¼­ÆäÀ̽º¿¡ Á÷Á¢ ¾ï¼¼½º¡¹¿¡ ÀÇÇÑ Ä®¶ó µ¥ÀÌÅÍ ÃëµæÀ» ½Ç½ÃÇÏÁö ¾Ê°í
    ¡¸DDCOLORKEY ±¸Á¶Ã¼¡¹¿¡ Á÷Á¢, Åõ°ú ½ÃŰ°í ½ÍÀº Ä®¶ó¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» ½Ç½ÃÇÕ´Ï´Ù.

    ¡¸DDCOLORKEY ±¸Á¶Ã¼¡¹

    ÀÌ ±¸Á¶Ã¼´Â ¡¸dwColorSpaceLowValue¡¹ ¡¸dwColorSpaceHighValue¡¹ÀÇ
    2°³ÀÇ ¸â¹ö¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
    Åõ°ú ÇÏ´Â Ä®¶óÀÇ ¹üÀ§¸¦ ÀÌ ¸â¹ö¿¡ °Ç³×ÁÝ´Ï´Ù.

    ¡¸256ÀÌÇÏÀÇ ¸ðµåÀÇ °æ¿ì¡¹´Â Åõ°ú ÇÏ°í ½ÍÀº ¹üÀ§ÀÇ ¡¸ÆÈ·¹Æ® ³Ñ¹ö¡¹¸¦
    ¸â¹ö¿¡ °Ç³×ÁÝ´Ï´Ù.

    ¡¸±× ÀÌ»óÀÇ ¸ðµåÀÇ °æ¿ì¡¹´Â ÆÈ·¹Æ® ³Ñ¹ö°¡ ¾Æ´Ï°í Ä®¶óÀÇ ¹üÀ§¸¦ °Ç³×ÁÝ´Ï´Ù.

    ÀÌ °æ¿ì °Ç³×ÁÖ´Â Ä®¶óÀÇ °ªÀº À̹ÌÁöÀÇ Çȼ¿ Æ÷¸Ë°ú °°Àº Çü½ÄÀÌ ¾Æ´Ï¸é ¾ÈµÅ±â ¶§¹®¿¡
    ±×°ÍÀ» Á¶»çÇÏ·Á¸é ¡¸¼­ÆäÀ̽ºÀÇ Á÷Á¢ ¾ï¼¼½º¡¹¸¦ ½Ç½ÃÇØ¾ß ÇÕ´Ï´Ù.

    ¡¸DDCOLORKEY ±¸Á¶Ã¼¡¹¿¡ »Ì¾Æ ³»°í ½ÍÀº Ä®¶óÀÇ ¹üÀ§¸¦ ¼³Á¤Çϰí Ä®¶ó ۸¦ ¼³Á¤ÇÏ°í ½ÍÀº ¼­ÆäÀ̽ºÀÇ ¡¸SetColorKey ¸Þ¼Òµå¡¹¿¡ ´Ù¸¥ ÆÄ¶ó¹ÌÅÍ¿Í ÇÔ²² °Ç³×ÁÝ´Ï´Ù.

    HRESULT SetColorKey(
        DWORD dwFlags,
        LPDDCOLORKEY lpDDColorKey
    );

    ¸Þ¼Òµå´Â À§¿¡ ÀÖ´Â ´ë·Î ÀÔ´Ï´Ù.
    Á¦1 ÆÄ¶ó¹ÌÅÍ´Â Ä®¶ó ۸¦ ¼ÂÆÃ ÇÒ ¶§ Ç÷¡±×(¾î¶»°Ô ¼ÂÆÃ ÇÒ±î)
    Á¦2 ÆÄ¶ó¹ÌÅÍ´Â ¡¸DDCOLORKEY ±¸Á¶Ã¼¡¹ÀÇ ÁÖ¼ÒÀÔ´Ï´Ù.

    Á¦1 ÆÄ¶ó¹ÌÅÍ¿¡ °Ç³×ÁÖ´Â Ç÷¡±×
    DDCKEY_COLORSPACE

    ±¸Á¶Ã¼°¡ Ä®¶ó ½ºÆäÀ̽º¸¦ Æ÷ÇÔÇϰí ÀÖ´Â °æ¿ì ¼ÂÆÃ ÇÑ´Ù.
    ±¸Á¶Ã¼°¡ ´ÜÀÏÀÇ Ä®¶ó ۸¦ Æ÷ÇÔÇϰí ÀÖÀ» ¶§´Â ¼ÂÆÃÇØ¼­´Â ¾È µÈ´Ù.

    DDCKEY_DESTBLT

    ºí·Ï Àü¼ÛÀÇ Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó Ű·Î¼­ »ç¿ëµÇ´Â Ä®¶ó Ű ȤÀº
    Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó ½ºÆäÀ̽º¿¡ ±¸Á¶Ã¼°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¼ÂÆÃ ÇÑ´Ù.

    DDCKEY_DESTOVERLAY

    ¿À¹ö·¹ÀÌ Ã³¸®ÀÇ Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó Ű·Î¼­ »ç¿ëµÇ´Â Ä®¶ó Ű ȤÀº
    Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó ½ºÆäÀ̽º¿¡ ±¸Á¶Ã¼°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¼ÂÆÃ ÇÑ´Ù.

    DDCKEY_SRCBLT

    ºí·Ï Àü¼ÛÀÇ Àü¼ÛÇØ¿Ã °÷ÀÇ Ä®¶ó Ű·Î¼­ »ç¿ëµÇ´Â Ä®¶ó Ű ȤÀº
    Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó ½ºÆäÀ̽º¿¡ ±¸Á¶Ã¼°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¼ÂÆÃ ÇÑ´Ù.

    DDCKEY_SRCOVERLAY

    ¿À¹ö·¹ÀÌ Ã³¸®ÀÇ Àü¼ÛÇØ¿Ã °÷ÀÇ Ä®¶ó Ű·Î¼­ »ç¿ëµÇ´Â Ä®¶ó Ű ȤÀº
    Àü¼ÛÇÒ °÷ÀÇ Ä®¶ó ½ºÆäÀ̽º¿¡ ±¸Á¶Ã¼°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¼ÂÆÃ ÇÑ´Ù.

    Ç÷¡±×´Â À§ÀÇ Á¾·ùµîÀÌ ÀÖ½À´Ï´Ù. »óȲ¿¡ µû¶ó ¼±ÅÃÇÏ½Ã±æ ¹Ù¶ø´Ï´Ù.
    Ä®¶ó ۸¦ À¯È¿ÇÏ°Ô ÇÑ´Ù

    ¼­ÆäÀ̽º¿¡ ¼ÂÆÃÇÑ Ä®¶ó ۸¦ À¯È¿ÇÏ°Ô ÇÏ·Á¸é, Àü¼Û ÇÔ¼ö
    ¡¸Blt¡¹³ª ¡¸BltFasr¡¹µîÀÇ Àü¼Û Ç÷¡±×¸¦ º¯°æÇؼ­ À¯È¿ÇÏ°Ô ÇÕ´Ï´Ù.

    ¿¹¸¦ µé¸é ¡¸Blt ¸Þ¼Òµå¡¹¡¤¡¤¡¤¡¤Á¦5 ÆÄ¶ó¹ÌÅÍ´Â Ç÷¡±×ÀÔ´Ï´Ù.
    Ä®¶ó Ű¿¡ °üÇÑ Ç÷¡±×´Â...

    DDBLT_ALPHAEDGEBLEND

    Ä®¶ó ŰÀÇ Ä®¶ó¸¦ Áý¾î³»´Â À̹ÌÁöÀÇ edgeÀÇ ¾ËÆÄ ä³Î·Î¼­ DDBLTFX ±¸Á¶Ã¼ÀÇ
    dwAlphaEdgeBlend ¸â¹ö¸¦ »ç¿ëÇÑ´Ù.

    DDBLT_KEYDEST

    Àü¼ÛÇÒ °÷ÀÇ Ç¥¸é(¼­ÆäÀ̽º)°ú °ü·ÃµÇ´Â Ä®¶ó ۸¦ »ç¿ëÇÑ´Ù.

    DDBLT_KEYSRC

    Àü¼ÛÇØ¿Ã °÷ÀÇ Ç¥¸é°ú °ü·ÃµÇ´Â Ä®¶ó ۸¦ »ç¿ëÇÑ´Ù.

    DDBLT_KEYDESTOVERRIDE

    Àü¼ÛÇÒ °÷ÀÇ Ç¥¸éÀÇ Ä®¶ó Ű·Î¼­ DDBLTFX ±¸Á¶Ã¼ÀÇ dckDestColorkey ¸â¹ö¸¦ »ç¿ëÇÑ´Ù.
    Áö±Ý±îÁöÀÇ ÇÁ·Î±×·¥µéÀº ¡¸À̹ÌÁö¡¹ÀÇ ¼­ÆäÀ̽º¿¡ Ä®¶ó ۸¦ ¼³Á¤ÇØ µÎ°í ÀÖ¾úÀ¸¹Ç·Î
    ¹é¼­ÆäÀ̽º¿¡ Àü¼Û ÇÒ ¶§¿¡ °Ç³×ÁÖ´Â Ç÷¡±×´Â ¡¸DDBLT_KEYSRC¡¹°¡ µË´Ï´Ù.

    À̰ÍÀº Àü¼ÛÇØ¿Ã °÷ÀÎ ¡¸À̹ÌÁö ¼­ÆäÀ̽º¡¹ÀÇ Ä®¶ó ۸¦ »ç¿ëÇØ Åõ°ú 󸮸¦
    ½Ç½ÃÇÏ´Â Ç÷¡±×ÀÔ´Ï´Ù.

    À̰Ͱú ºñ½ÁÇÑ Ç÷¡±×·Î ¡¸DDBLT_KEYDEST¡¹ÀÇ °æ¿ì´Â Àü¼ÛÇÒ °÷ÀÇ ¼­ÆäÀ̽ºÀÇ Ä®¶ó Ű
    ¸¦ »ç¿ëÇØ¼­ Åõ°ú 󸮸¦ ½Ç½ÃÇÏ´Â °ÍÀÌ µË´Ï´Ù.

    /////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////

    °¨¸¶ ÄÁÆ®·Ñ

    256Ä®¶óÀÌ»óÀÇ ¸ðµå¿¡¼­ ¡¸ÆÈ·¹Æ®¡¹ÀÇ °³³äÀÌ ¾ø±â ¶§¹®¿¡
    ÆÈ·¹Æ® µ¥ÀÌÅÍÀÇ ¼öÁ¤¿¡ ÀÇÇÑ È­¸é È¿°ú¸¦ ½Ç½ÃÇÒ ¼ö°¡ ¾ø½À´Ï´Ù.
    ±×·¡¼­ 256Ä®¶óÀÌ»óÀÇ ¸ðµå¿¡¼­´Â ¡¸°¨¸¶ ÄÁÆ®·Ñ¡¹À̶ó ÇÏ´Â °ÍÀ» ½Ç½ÃÇÕ´Ï´Ù.

    ¡¸°¨¸¶¡¹¶õ Ä®¶óÀÇ¡¸ÈÖµµ¡¹·Î DirectDraw´Â ÀÌ °¨¸¶°ªÀ» R¡¤G¡¤BÀÇ ¼¼°¡Áö¿ä¼Ò¸¦ Çϳª ÇϳªÀÇ ¼³Á¤ÀÌ °¡´ÉÇÕ´Ï´Ù.
    RÀÇ °¨¸¶°ªÀ» ¿Ã¸®¸é ÀûÄ®¶ó°¡ °­Á¶µË´Ï´Ù.
    °¨¸¶°ªÀ» Æò±ÕÀûÀ¸·Î Çϸé Èæ¹éÀÇ È¿°úµµ °¡´ÉÇÕ´Ï´Ù.

    ¶Ç °¨¸¶ ÄÁÆ®·ÑÀ» »ç¿ëÇϱâ À§ÇØ ¡¸dxguid.lib¡¹ÀÌ ¶óÀ̺귯¸®¸¦ ¸µÅ©ÇØ¾ß ÇÕ´Ï´Ù.

    »ùÇÃÀº 32ºñÆ® Ä®¶ó·Î µ¿ÀÛÇÕ´Ï´Ù.
    Z۸¦ ´©¸£¸é ÀûÄ®¶ó °¨¸¶°ªÀ» ³»¸³´Ï´Ù. AŰ·Î ¿Ã¸³´Ï´Ù.
    X۸¦ ´©¸£¸é ³ìÄ®¶ó °¨¸¶°ªÀ» ³»¸³´Ï´Ù. SŰ·Î ¿Ã¸³´Ï´Ù.
    C۸¦ ´©¸£¸é ûĮ¶ó °¨¸¶°ªÀ» ³»¸³´Ï´Ù. DŰ·Î ¿Ã¸³´Ï´Ù.

    GammaControl ¿ÀºêÁ§Æ®ÀÇ »ý¼º

    °¨¸¶°ªÀ» Á¶Á¤ÇÏ·Á¸é ¡¸IDirectDrawGammaControl ¿ÀºêÁ§Æ®¡¹¸¦ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.
    ÀÌ ¿ÀºêÁ§Æ®´Â ¡¸¼­ÆäÀ̽º¡¹ÀÇ ¡¸QueryInterface ¸Þ¼Òµå¡¹·Î »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
    Âü°í¼­¿¡´Â ´ëºÎºÐ ¿ÀºêÁ§Æ®¸¦ ¡¸ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º¡¹¿¡¼­ »ý¼ºÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù

    IDirectDrawGammaControl ¿ÀºêÁ§Æ® ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅÍ

    ÀÌ Æ÷ÀÎÅÍ´Â ¡¸LPDIRECTDRAWGAMMACONTROL¡¹·Î Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
    ¼Ò½ºÇÁ·Î±×·¥¿¡¼­´Â ¡¸grobal.h¡¹¿¡ ÀÌ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇß½À´Ï´Ù.

    LPDIRECTDRAWGAMMACONTROL lpGamma;
    //°¨¸¶ ÄÁÆ®·Ñ ¿ÀºêÁ§Æ® Æ÷ÀÎÅÍ

    ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÏ¸é ¡¸ÇÁ¶óÀ̸Ӹ®¼­ÆäÀ̽º¡¹ÀÇ ¡¸QuertInterface ¸Þ¼Òµå¡¹
    ¸¦ »ç¿ëÇØ¼­ ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÕ´Ï´Ù.

    ¿ÀºêÁ§Æ®ÀÇ »ý¼ºÀº ¡¸CreateDraw ÇÔ¼ö¡¹¾È¿¡¼­ ó¸®Çϰí ÀÖ½À´Ï´Ù.
    ÇÁ¶óÀ̸Ӹ® ¼­ÆäÀ̽º°¡ »ý¼ºµÇ¾î ÀÖÀ¸¹Ç·Î Çѹø¸¸ ½ÇÇàµÇ´Â Àå¼Ò¶ó¸é ¾îµð¶óµµ ±¦Âú½À´Ï´Ù.

    HRESULT QueryInterface(
        REFIID riid,
        LPVOID* obp
    );

    ÀÌ ¸Þ¼Òµå´Â ¡¸°¨¸¶ ÄÁÆ®·Ñ ¿ÀºêÁ§Æ®¡¹¸¦ »ý¼ºÇÏ´Â ±â´ÉÀº ¾Æ´Ï°í
    ÆÄ¶ó¹ÌÅÍ·Î ÁöÁ¤ÇÏ´Â ¿ÀºêÁ§Æ®°¡¡¸COM¡¹À» ¼­Æ÷Æ®Çϰí ÀÖÀ»±î?¸¦ Ã½Å©ÇØ »ý¼ºÇÕ´Ï´Ù.

    ¡¸COM¡¹°¡ ¹«¾ùÀΰ¡ ½Å°æÀÌ ¾²À̰ÚÁö¸¸
    ¿©±â¿¡¼­´Â ½Å°æ¾²Áö ¾Ê°í ÁøÇàÇÕ´Ï´Ù.

    ¡¸°¨¸¶ ÄÁÆ®·Ñ ¿ÀºêÁ§Æ®¡¹¸¦ »ý¼ºÇÏ·Á¸é, Á¦1ÆÄ¶ó¹ÌÅÍ¿¡¡¸IID_DirectDrawGammaControl¡¹
    À» °Ç³×ÁÝ´Ï´Ù.

    Á¦2 ÆÄ¶ó¹ÌÅÍ¿¡´Â ¡¸¿ÀºêÁ§Æ® ÀÎÅÍÆäÀ̽º¡¹ÀÇ ÁÖ¼Ò¸¦ º¸°üÇÏ´Â Æ÷ÀÎÅ͸¦ °Ç³×ÁÝ´Ï´Ù.

    QueryInterface ¸Þ¼Òµå

    °¨¸¶ ÄÁÆ®·Ñ ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇϱâ À§ÇØ »ç¿ëÇÏ´Â ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇÏÁö¸¸,
    °¨¸¶ ÄÁÆ®·Ñ ¿ÀºêÁ§Æ®¸¦ »ý¼º¸¸ ÇÏ´Â ¸Þ¼Òµå´Â ¾Æ´Õ´Ï´Ù.

    ÇïÇÁ¿¡´Â ÀÌ·¸°Ô ÀûÇô ÀÖ½À´Ï´Ù.

    DirectX ±¸ÃàÀÇ ±âº»À¸·Î µÇ´Â ÄÄÆÛ³ÍÆ® ¿ÀºêÁ§Æ® ¸ðµ¨ (COM)Àº ÈĹæ ȣȯ¼º¿¡ ¿µÇâÀ» ÁÖ´Â ÀÏ ¾øÀÌ
    »õ·Î¿î ÀÎÅÍÆäÀ̽º·Î »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î Çϰí ÀÖ´Ù.
    À̰ÍÀ¸·Î IDirectDraw ÀÎÅÍÆäÀ̽º´Â IDirectDraw2 ÀÎÅÍÆäÀ̽º¿¡ ÀÇÇØ ¿Å°Ü³õÀ» ¼ö ÀÖ´Ù.
    ÀÌ »õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ ¾òÀ¸·Á¸é ´ÙÀ½ÀÇ C++ ÀÇ ¿¹¿¡ ³ªÅ¸³ªµíÀÌ IDirectDraw::QueryInterface¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù.
    ¡¸°¨¸¶ÄÁÆ®·Ñ ÀÎÅÍÆäÀ̽º¡¹µµ À§ÀÇ ÇïÇÁ¿¡ ÀûÇô Àִµ¥·Î ÇÏÀ§ ȣȯÀ» À¯ÁöÇϱâ À§ÇØ
    ¡¸QueryInterface ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇØ¼­ ÁöÁ¤µÈ ¿ÀºêÁ§Æ®°¡ »õ·Î¿î °ÍÀ̶ó¸é
    ³°Àº ¿ÀºêÁ§Æ®º¸´Ùµµ ¿ì¼±½ÃÇØ¼­ »ç¿ëÇϵµ·Ï ÇÑ´Ù¡¤¡¤¡¤¡¤¡¤ÇÏ´Â ¶æÀÔ´Ï´Ù.

    °¨¸¶°ªÀÇ º¯°æ

    ¿ÀºêÁ§Æ®µµ »ý¼ºÇßÀ¸¹Ç·Î ´ÙÀ½À¸·Î °¨¸¶°ªÀ» º¯°æÇϸé
    È­¸éÀÇ Ä®¶ó¸¦ º¯È­½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.

    °¨¸¶°ªÀº ¡¸DDGAMMARAMP ±¸Á¶Ã¼¡¹ÀÇ ¡¸red¡¹ ¡¸green¡¹ ¡¸blue¡¹ÀÇ ¸â¹ö¿¡ °¨¸¶°ªÀ»
    ³Ö°í ¡¸IDirectDrawGammaControl ¿ÀºêÁ§Æ®¡¹ ¡¸SetGammaRamp ¸Þ¼Òµå¡¹¿¡ ÆÄ¶ó¹ÌÅÍ
    ·Î °Ç³×Áֱ⸸ ÇÏ¸é µË´Ï´Ù.

    °¨¸¶°ª
    °¨¸¶°ªÀº ¡¸0~65535ÀÇ¡¡65536¡¹ÀÔ´Ï´Ù.
    Ä®¶ó Á¤º¸´Â ¡¸0~255ÀÇ¡¡256¡¹À¸·Î Ç¥ÇöµÇ°í ÀÖ½À´Ï´Ù.
    Ä®¶ó Á¤º¸ °ªÀÌ ¡¸(RED) 46¡¹À̾ú´ø °æ¿ìÀÇ °¨¸¶°ªÀº ¡¸(RED) 11776¡¹ÀÌ µË´Ï´Ù.

    °¨¸¶°ª¡¡= Ä®¶ó°ª¡¿256

    À§ÀÇ ½ÄÀ¸·Î °¨¸¶°ªÀÌ ±¸ÇØ Áý´Ï´Ù.
    °¨¸¶°ªÀÌ ¡¸0¡¹ÀÌ µÇ¸é ¡¸Â£Àºblack¡¹¡¤¡¤¡¤¡¤¡¸65535¡¹°¡ µÇ¸é ¡¸Â£Àºwhite¡¹°¡ µË´Ï´Ù.

    ColorÀÇ º¯È­
    ¼Ò½ºÀÇ ¡¸»¡°­ °­Á¶ 󸮡¹ÀÇ È帧À» ¿©±â¼­ ¼³¸íÇÕ´Ï´Ù.

    ¡¸IDirectDrawGammaControl ¿ÀºêÁ§Æ®¡¹¿¡´Â ¡¸SetGammaRamp ¸Þ¼Òµå¡¹¿Í
    ¡¸GetGammaRamp ¸Þ¼Òµå¡¹ µÎ °³°¡ ÀÖ½À´Ï´Ù.

    µÚÀÇ ¡¸GetGammaRamp ¸Þ¼Òµå¡¹´Â ÇöÀçÀÇ °¨¸¶°ªÀ» ÃëµæÇÒ ¼ö ÀÖ´Â ¸Þ¼ÒµåÀÔ´Ï´Ù.
    ÀÌ ¸Þ¼Òµå¸¦ »ç¿ëÇØ ¿ì¼±Àº ÇöÀçÀÇ °¨¸¶°ªÀ» ÃëµæÇÕ´Ï´Ù.

    HRESULT GetGammaRamp(
        DWORD dwFlags,
        LPGAMMARAMP lpRampData
    );

    Á¦1 ÆÄ¶ó¹ÌÅÍ£ºÇ×»ó 0 ÀÔ´Ï´Ù.(ÇïÇÁÂüÁ¶)
    Á¦2 ÆÄ¶ó¹ÌÅÍ£ºDDGAMMARAMP ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ
    Á¦2 ÆÄ¶ó¹ÌÅÍ·Î °Ç³×ÁÖ´Â ¡¸DDGAMMARAMP ±¸Á¶Ã¼¡¹ÀÇ ¸â¹ö¿¡ ÇöÀçÀÇ °¨¸¶°ªÀÌ °Ý³³µË´Ï´Ù.

    typedef struct _DDGAMMARAMP {
        WORD red[256];
        WORD green[256];
        WORD blue[256];
    } DDGAMMARAMP, FAR * LPDDGAMMARAMP;

    À§°¡ ¡¸DDGAMMARAMP ±¸Á¶Ã¼¡¹ÀÔ´Ï´Ù.
    ÀÌ ¡¸red¡¹ ¡¸green¡¹ ¡¸blue¡¹ÀÇ 3 ¸â¹ö·Î º¯°æÇÏ°í ½ÍÀº °¨¸¶°ªÀ» ³Ö½À´Ï´Ù.
    °¢ Ä®¶óÀÇ ¿ä¼Ò¸¶´Ù ¡¸256°³ ¹è¿­¡¹ÀÌ ÀÖÀ¸¹Ç·Î ¿ì¼± ·çÇÁ·Î ¸ðµç ¹è¿­ ¿ä¼Ò¸¦
    °íÃÄ ½á º¸¼¼¿ä.

    GetGammaRamp ¸Þ¼Òµå·Î ÇöÀçÀÇ °¨¸¶°ªÀ» ÃëµæÇÏ°í ³ª¼­

    Àû»öÀ» °­Á¶ÇÑ´Ù
    Àû»öÀ» °­Á¶ÇÏ´Â °æ¿ì´Â ¡¸red °¨¸¶ ¹è¿­¡¹¾ÈÀÇ °ªÀ» Áõ°¡½ÃÅ´À¸·Î °¡´ÉÇÕ´Ï´Ù.

    DDGAMMARAMP Gamma;
    lpGamma->GetGammaRamp(0, &Gamma);

    for(int i=0;i<=255;i++){
        Gamma.red[i] = Gamma.red[i]+100;
    }

    ¡¸lpGamma¡¹´Â ¡¸IDirectDrawGammaControl ÀÎÅÍÆäÀ̽º¡¹ÀÇ Æ÷ÀÎÅÍ

    À§ÀÇ ½ÄÀ¸·Î REDÀÇ °¨¸¶°ª¸¸À» 100 °­Á¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.
    º¯°æÀ» ÇßÀ¸¹Ç·Î º¯°æÇÑ °¨¸¶°ªÀ» ´Ù½Ã ¼ÂÆÃÇÕ´Ï´Ù.
    À̰Ϳ¡´Â ¡¸SetGammaRamp ¸Þ¼Òµå¡¹¸¦ »ç¿ëÇÕ´Ï´Ù.

    HRESULT SetGammaRamp(
        DWORD dwFlags,
        LPGAMMARAMP lpRampData
    );

    Á¦1 ÆÄ¶ó¹ÌÅÍ£ºÇ÷¡±×ÀÔ´Ï´Ù.

    dwFlags
    Flag indicating if gamma calibration is desired.
    Set this parameter DDSGR_CALIBRATE to request that the calibrator adjust the
    gamma ramp according to the physical properties of the display, making the result
    identical on all systems. If calibration is not needed, set this parameter to 0.

    ¡¸DDSGR_CALIBRATE¡¹µçÁö ¡¸0¡¹À» °Ç³×ÁÙ °ÍÀ̶ó°í »ý°¢µË´Ï´Ù.
    ¡¸calibration¡¹°¡ ÇÊ¿äÇÑ ¶§´Â ¡¸DDSGR_CALIBRATE¡¹¸¦ ¼ÂÆÃÇϰí
    ÇÊ¿ä ¾øÀ» ¶§¿¡ ¡¸0¡¹À» °Ç³×ÁØ´Ù ¡¤¡¤ ¶ó°í º¸ÀÔ´Ï´Ù.

    ¡¸SetGammaRamp ¸Þ¼Òµå¡¹°¡ ½ÇÇàµÇ¸é °ð ¹Ù·Î È­¸éÀÇ Ä®¶ó´Â º¯°æµË´Ï´Ù.

    Âü°í

    °¨¸¶ ÄÁÆ®·ÑÀº ºñµð¿À Ä«µåÀÇ ±â´É¿¡ µû¶ó¼­ µ¿ÀÛÇϱ⶧¹®¿¡
    ¸¸¾à ºñµð¿À Ä«µå°¡ °¨¸¶ ÄÁÆ®·Ñ¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â °æ¿ì´Â Á¦´ë·Î µ¿ÀÛ ÇÏÁö ¾Ê½À´Ï´Ù.

    /////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////




    Comment


    ÀÔ·ÂÇÏ3 1283578935



    Locations of visitors to this page