Surface »ç¿ë



1. ÅØ½ºÃÄ »ý¼º

if(FAILED(g_d3d_Device->CreateTexture(w, h, 0, 0,
                       D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, ppTexture, NULL)))
                goto error;

D3DXÀÇ D3DXCreateTextureFromFile()°°Àº ÇÔ¼ö¸¦ »ç¿ëÇØ ÅØ½ºÃĸ¦ ·ÎµåÇØµµ µÇÁö¸¸, ¿©±â¼­´Â ÅØ½ºÃÄ Ç¥¸é¿¡
Á÷Á¢ Á¢±ÙÇϱâ À§ÇØ µð¹ÙÀ̽ºÀÇ CreateTexture()¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.

ù ¹øÂ°, µÎ ¹øÂ° ÀÎÀÚ´Â Æø°ú ³ôÀ̸¦ ³ªÅ¸³½´Ù.

¼¼ ¹øÂ° ÀÎÀÚ´Â ¹Ó·¹º§À» ³ªÅ¸³½´Ù.
0ÀÌ¸é ¸ðµç ·¹º§ÀÇ ¹Ó¸ÊÀ» ¸¸µé°í, 0ÀÌ¿ÜÀÇ °ªÀº ÇØ´çÇÏ´Â ·¹º§ÀÇ ¸Ê¸¸ ¸¸µç´Ù.

³× ¹øÂ° ÀÎÀÚ´Â »ç¿ëÇ÷¡±×·Î 0ÀÌ¸é ¾Æ¹«·± °ªµµ ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù.
D3DUSAGE_DEPTHSTENCILÀ̸é Z ½ºÅÙ½Ç, D3DUSAGE_RENDERTARGETÀº ·»µå¸µ Ÿ°ÙÀÌ´Ù.
º¸Åë ÅØ½ºÃÄ·Î »ç¿ëµÈ¸é 0À» ³Ö´Â´Ù.

´Ù¼¸ ¹øÂ° ÀÎÀÚ´Â ÅØ½ºÃÄ Æ÷¸ËÀ¸·Î ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
µðÆúÆ® ÁöÁ¤ÀÚ D3DFMT_UNKNOWN¿Í °°ÀÌ »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.

¿©¼¸ ¹øÂ° ÀÎÀÚ´Â ÅØ½ºÃÄ ¸Þ¸ð¸®¿¡ ´ëÇÑ Ç÷¡±×ÀÌ´Ù.
º¸ÅëÀº D3DPOOL_DEFAULT¸¦ »ç¿ëÇÏÁö¸¸, ÀÌ °ªÀº ¶ôÀ» °É ¼ö ¾ø´Â ¿É¼ÇÀÌ´Ù.
¶ÇÇÑ D3DPOOL_SYSTEMMEMµµ ¶ôÀ» °É ¼ö ÀÖÁö¸¸, ´ÙÀÌ·ºÆ® XÂÊ¿¡¼­ ¾×¼¼½º ÇÒ ¼ö ¾ø´Ù.
ÀÌ ÅØ½ºÃÄ´Â ·»µå¸µ½Ã ÅØ½ºÃÄ·Î »ç¿ëÇÒ ¼ö ¾ø´Ù.
ÀÌ Ç÷¡±×ÀÇ »ç¿ë ¸ñÀûÀº ¿ì¼± ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡ ¹öÆÛ¸¦ ¸¸µé°í ¹öÆÛ¿¡¼­ ÅØ½ºÃĸ¦ Á¶ÀÛÇÑÈÄ DirectX¸¦
»ç¿ëÇØ, CopyRects()¿Í °°Àº ÇÔ¼ö¸¦ »ç¿ëÇØ ºñµð¿À ¸Þ¸ð¸®·Î Ä«ÇÇÇÑ´Ù.

Àϰö ¹øÂ° ÀÎÀÚ´Â LPDIRECT3DTEXTURE9·Î ÅØ½ºÃÄ °´Ã¼ÀÌ´Ù.

¿©´ü ¹øÂ° ÀÎÀÚ´Â ¿¹¾àµÈ ÀÎÀÚ·Î NULLÀ» ³Ö´Â´Ù.            

if(FAILED((*ppTexture)->GetSurfaceLevel(0, &surface)))
               goto error;

ù ¹øÂ° ÀÎÀÚ´Â ¹Ó¸Ê ·¹º§ 0ÀÇ surface¸¦ ±¸ÇØ ¿Â´Ù. ·¹º§ 0Àº ¿ø·¡ÀÇ Å©±âÀÌ´Ù.

surface->LockRect(&rect, NULL, 0);

ù ¹øÂ° ÀÎÀÚ´Â D3DLOCKED_RECT ±¸Á¶Ã¼·Î ¶ôµÈ ¿µ¿ªÀÇ Á¤º¸°¡ µé¾î¿Â´Ù.
µÎ ¹øÂ° ÀÎÀÚ´Â ¶ôÀ» °É RECT ±¸Á¶Ã¼ÀÌ´Ù. NULL°ªÀ̸é Àüü ¿µ¿ª¿¡ ¶ôÀ» °Ç´Ù.
¼¼ ¹øÂ° ÀÎÀÚ´Â ¶ôÀÇ À¯ÇüÀÌ´Ù. ¿©±â¼­´Â 0À» ³Ö´Â´Ù.

D3DLOCKED_RECT ±¸Á¶Ã¼´Â  Pitch¿Í  pBits µÎ °³ÀÇ  Çʵå·Î ÀÌ·ïÁ® ÀÖ´Ù.
pBits Àá±×Áø ¹öÆÛÀÇ ¼±µÎ ÁÖ¼Ò¸¦ ³ªÅ¸³½´Ù.pBits´Â x°ª, Áï ÇÑÇàÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ³ªÅ¸³½´Ù. ÇÑÇàÀÌ 1024Çȼ¿À̰í 4¹ÙÀÌÆ®¶ó¸é
ÇÑ ÇàÀÇ ¹ÙÀÌÆ®°¡ 1024*4ÀÇ °á°ú °ªÀÌ ³ª¿Í¾ß ÇÏÁö¸¸ ±×·¡ÇÈ Ä«µå¿¡¼­ ij½Ì°ú °°Àº ¿©·¯ °¡Áö ÀÌÀ¯·Î ÇØ¼­ °è»ê°ª°ú
ÀÏÄ¡ ÇÏÁö ¾Ê±â ¶§¹®¿¡ ÇÑÇàÀ» Áõ°¡½Ãų ¶§ ¸¶´Ù pBits°ªÀ» »ç¿ëÇØ¾ß ÇÑ´Ù

        //BMP µ¥ÀÌŸ¸¦ Ä«ÇÇÇÑ´Ù(ºñÆ®¸ÊÀº À§¾Æ·¡ ¹Ý´ë·Î ÀúÀåµÇ±â ¶§¹®¿¡ ¾Æ·¡¿¡¼­ºÎÅÍ ÀúÀåÇÑ´Ù)
        for(y=(int)bInfo.biHeight-1; y>=0; y--)
        {
                //Y°ªÀÇ ½ÃÀÛ À§Ä¡·Î À̵¿ÇÑ´Ù.
                data = (LPDWORD)((LPBYTE)rect.pBits + rect.Pitch * y);

                for(x=0; x<bInfo.biWidth; x++, data++)
                {
                        BYTE    r, g, b;
                        fread(&b, sizeof(BYTE), 1, fp);
                        fread(&g, sizeof(BYTE), 1, fp);
                        fread(&r, sizeof(BYTE), 1, fp);

                        //ºÒÅõ¸í Ä®¶ó°ªÀ» surface¿¡ ³Ö´Â´Ù.
                        *data = 0xff000000 | ((DWORD)r << 16) | ((DWORD)g << 8) | ((DWORD)b);
                }
        }

bInfo´Â BITMAPINFOHEADER ±¸Á¶Ã¼ÀÌ´Ù. ¿©±â¿¡ ºñÆ®¸Ê »çÀÌÁî, Çȼ¿´ç Ä®¶ó ºñÆ®¼ö¿Í °°Àº Á¤º¸°¡ µé¾î°¡ ÀÖ´Ù.
ºñÆ®¸Ê µ¥ÀÌÅÍ´Â À§¾Æ·¡°¡ ¹Ý´ë ¹æÇâÀ¸·Î ÀúÀåµÇ´Â Æ÷¸ËÀ̱⠶§¹®¿¡ ¸Þ¸ð¸®¿¡ ÀúÀåÇÒ ¶§ ´Ù½Ã À§¾Æ·¡¸¦ µÚÁý¾îÁØ´Ù.
Pitch°ªÀ¸·Î y°ªÀÇ ½ÃÀÛ À§Ä¡·Î À̵¿ÇÑ´Ù.
ÅØ½ºÃÄ Æ÷¸ËÀÌ D3DFMT_A8R8G8B8À̹ǷΠ4¹ÙÀÌÆ® DWORD Å©±â°¡ µÈ´Ù.

 *data = 0xff000000 | ((DWORD)r << 16) | ((DWORD)g << 8) | ((DWORD)b);
À§ÀÇ ¹æ½ÄÀº ¾Æ·¡ÀÇ ¹æ½Ä°ú °°´Ù. surface¿Í ºñÆ®¸ÊÀº blue, green, redÀÇ ¼ø¼­·Î ÀúÀåµÇ¾îÀÖ´Ù.\
surfaceµµ ¶ÇÇÑ blue, green, redÀÇ ¼ø¼­·Î ÀúÀåµÈ´Ù. ºÒÅõ¸íÇÑ °ªÀ¸·Î ¸¸µé±â À§ÇØ 0xff·Î ä¿î´Ù.

            char* p = (char*)data;
            *p = b;
            *(p + 1) = g;
            *(p + 2) = r;
            *(p + 3) = 0xff;

surface->UnlockRect();

Ç¥¸éÀÇ »ç¿ëÀÌ ³¡³ª¸é ¶ôÀ» ÇØÁ¦ÇÑ´Ù.

_RELEASE_<LPDIRECT3DSURFACE9>(surface); 

GetSurfaceLevel()ÇÔ¼ö ³»ºÎ¿¡¼­ IDirect3DSurface9 ÂüÁ¶ Ä«¿îÅ͸¦ Áõ°¡½Ã۱⠶§¹®¿¡ ¸±¸®Áî ½ÃÄÑÁÖ¾î¾ß ÇÑ´Ù.
¾È±×·¯¸é IUnknown::Release()½Ã¿¡ ¸Þ¸ð¸® leakÀÌ ÀÏ¾î ³¯°ÍÀÌ´Ù.

LoadTextureFromBMP() ÇÔ¼öÀÇ Àüü ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.


ºñµð¿À ·¥ÀÇ ¾ð, ¶ôÀº ÇÁ·¹ÀÓÀ» ¶³¾î¶ß¸°´Ù(¶ôÀ» °É°í ¾×¼¼½ºÇϱ⠶§¹®ÀÌ´Ù.) DirectX¿¡¼­ ÇÁ·¹ÀÓÀ» ¶³¾î¶°¸®´Â
ù ¹øÂ° ¿ä¼Ò´Â ´Ù°¢Çü ä¿ì±âÀÌ´Ù. ±×¸®°í µÎ ¹øÂ° ¿ä¼Ò´Â ºñµð¿À·¥¿¡ ¾×¼¼½º ÇÏ´Â °ÍÀÌ´Ù.
¸ÅÇÁ·¹ÀÓ¸¶´Ù ¾×¼¼½º ÇØ¾ß ÇÑ´Ù¸é ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡ Ç¥¸éÀ» ¸¸µçÈÄ, CopyRect() ÇÔ¼ö·Î º¹»çÇÏ´Â°Ô ÁÁÁö ¾ÊÀ»±îÇÏ´Â
»ý°¢ÀÌ µç´Ù.

¸¶Áö¸·À¸·Î FillRed()¸¦ Ãß°¡ÇÏ¿´´Ù.
F1 ۸¦ ´©¸£¸é ±èÅÂÈñ »çÁøÀ» »¡°£»öÀ¸·Î ä¿î´Ù.

 

[Æß]
http://monsho.hp.infoseek.co.jp/dx/dx9.html
Direct9¸¦ ÀÌ¿ëÇÑ 3D GAME ÇÁ·Î±×·¡¹Ö ÀÔ¹® - Á¤º¸¹®È­»ç