|

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;
Ç¥¸éÀÇ »ç¿ëÀÌ ³¡³ª¸é ¶ôÀ» ÇØÁ¦ÇÑ´Ù.
|
_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 ÇÁ·Î±×·¡¹Ö ÀÔ¹® - Á¤º¸¹®È»ç
|