¸Þ½¬ µ¥Ä®¸Ê

µ¥Ä®À» ±¸ÇöÀº Åõ¿µ ÅؽºÃÄ µ¥Ä®°ú ¸Þ½¬ µ¥Ä®ÀÌ ÀÖ´Ù.
¿©±â¼­´Â ¸Þ½¬ Ä®¿¡ ´ëÇؼ­ ±¸ÇöÇØ º»´Ù. GPG2±Ç¿¡µµ ÀÖÁö¸¸ À¥°Ë»öÀ» Çغ¸´Ï Wolfire¿¡¼­ ¸Þ½¬ µ¥Ä®¿¡ ´ëÇؼ­ Ä£ÀýÇÏ°Ô ¼³¸íÇß´Ù.

http://blog.wolfire.com/2009/06/how-to-project-decals/

Wolfire ¸Þ½¬ µ¥Ä® Å©¶óÀÌ ¿£Áø ¸Þ½¬ µ¥Ä®, Á÷Á¢ WolfireÀÇ ¾Ë°í¸®Áò¿¡ µû¶ó ±¸ÇöÇغ» ¸Þ½¬ µ¥Ä®À» ±×¸²À¸·Î ¸ÕÀú º¸ÀÚ

[±×¸²: Wolfire ¸Þ½¬ µ¥Ä®]


[±×¸²: Å©¶óÀÌ ¿£Áø ¸Þ½¬ µ¥Ä®]

[±×¸²: Á÷Á¢ ±¸ÇöÇغ» ¸Þ½¬ µ¥Ä®]

WolfireÀÇ ±âº» ¾Ë°í¸®ÁòÀ» ¾Ë¾Æ º¸ÀÚ.( ¿©±â¼­ ´ÙÀÌ·ºÆ®X¸¦ »ç¿ëÇÏÁö¸¸ ¿À¸¥¼Õ ÁÂÇ¥°è¸¦ »ç¿ëÇÏ°í ÀÖ´Ù.)

1. OBB »ç°¢ÇüÀº Á÷±³ ÁÂÇ¥°èÀÇ Ä«¸Þ¶ó·Î »ý°¢ÇØ ¿ùµå - ºä - ÇÁ·ÎÁ§¼Ç Çà·ÄÀ» ÀÌ¿ëÇØ ¹öÅؽº¸¦ º¯È¯ÇÑ´Ù.

2. Ãà ¹æÇâ¿¡ ÀÇÇØ Å¬¸®ÇÎÇÑ´Ù.

3. ÅؽºÃÄ ÁÂÇ¥¸¦ °è»êÇÑ´Ù.

4. ÀÌ ¿ÜÀÇ °í·Á »çÇ×

Å©°Ô 3´Ü°è¿¡ ÀÇÇؼ­ ±×·ÁÁø´Ù. ¿©±â¼­´Â »ý·« µÇ¾úÁö¸¸ µ¥Ä® ¸ÊÀ¸·Î º¯È¯ ÇØ¾ß ÇÒ ¹öÅؽº¸¦ ¸ÕÀú Á¦¿Ü½ÃÄÑ¾ß µ¥Ä®¸Ê º¯È¯½Ã ¼Óµµ¸¦ ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. Ä«¸Þ¶óÀÇ ¹æÇâ¿¡ µû¶ó ÅؽºÃÄ°¡ ´Ã¾î³¯¼ö ÀÖ´Ù.
µ¥Ä®¸Ê ½ÇÇàÀº  void DxClipPolygon::TestDecalmap()À¸·Î ½ÇÇàÇÑ´Ù.

1. »ç°¢ÇüÀº Á÷±³ ÁÂÇ¥°èÀÇ Ä«¸Þ¶ó·Î  ¿ùµå - ºä - ÇÁ·ÎÁ§¼Ç Çà·ÄÀ» ÀÌ¿ëÇØ ¹öÅؽº¸¦ º¯È¯ÇÑ´Ù.

D3DXMATRIXA16  mat = matWorld * matCameraView * matProj;
D3DXVec3TransformCoord(&out, &vec, &mat);

µÎ ¸í·ÉÀ» ÅëÇؼ­ ¹öÅؽº¸¦ ¿ùµå - ºä - ÇÁ·ÎÁ§¼Ç Çà·Ä·Î º¯È¯ÇÑ´Ù.
Á÷±³ Çà·ÄÀ̹ǷΠ»ç°¢ÇüÀ¸·Î ±×¸®¸é  ´ÙÀ½°ú °°´Ù.

Ä«¸Þ¶ó´Â ¿ùµå-ºä-Á÷±³ Åõ¿µ º¯È¯À» Çϸé x, yÃàÀº -1, -1¿¡¼­ 1, 1»çÀÌ, zÃàÀº 0¿¡¼­ 1·Î º¯È¯µÈ´Ù.
°¡»óÀÇ Ä«¸Þ¶ó »ç°¢Çü ¹ÛÀÇ ¹öÅؽº´Â Ŭ¸®ÇÎ ½ÃŲ´Ù.

2. Ãà ¹æÇâ¿¡ ÀÇÇØ Å¬¸®ÇÎÇÑ´Ù.

º¯È¯ÀÌ µÈ ¹öÅؽº´Â Ãà¹æÇâÀ¸·Î Ŭ¸®ÇÎ ½ÃŲ´Ù. x, y Ãà 4Ãà°ú zÃàÀº Èĸ鸸 Ŭ¸®ÇÎ ½ÃŲ´Ù.

    ClipAxis( 1, 0, 0, -1, false )
    ClipAxis( -1, 0, 0, 1, false )
    ClipAxis( 0, 1, 0, -1, false )
    ClipAxis( 0, -1, 0, 1, false )

    //zÃà ÀÚ¸£±â
    ClipAxis( 0, 0, -1, 1, false )

3. ÅؽºÃÄ ÁÂÇ¥¸¦ °è»êÇÑ´Ù.'

¿ùµå-ºä-Åõ¿µ Çà·Ä¿¡ º¯È¯µÈ ¹öÅؽº ÁÂÇ¥´Â ÅؽºÃÄ ÁÂÇ¥¿Í ºñ½Á ÇÏ¿© ÅؽºÃÄ ÁÂÇ¥·Î º¯È¯Çϱ⠽±´Ù.

float u = 0.5f * vec.x + 0.5f
float v = -0.5f * vec.y + 0.5f
m_texUV.push_back( DataType::Point2( u, v ) )

4. ÀÌ¿Ü °í·Á»çÇ×

z-fightingÀÌ ÀÏ¾î ³ªÁö ¾Êµµ·Ï µ¥Ä®¸ÊÀÇ ¹öÅؽº¸¦ ³ë¸Ö°ªÀÇ ¹æÇâ¿¡ µû¶ó Á¶±Ý Å°¿ö ÁØ´Ù.

m_pVertex[i].x = m_position[i].x + m_normal[i].x*0.01f
m_pVertex[i].y = m_position[i].y + m_normal[i].y*0.01f
m_pVertex[i].z = m_position[i].z + m_normal[i].z*0.01f

°á·Ð

¸Þ½¬ µ¥Ä®¸ÊÀÇ ±¸ÇöÀº Ä«¸Þ¶ó »ç°¢Çü ¹Ú½º¾È¿¡ µé¾î¿À´Â ¹öÅؽº¸¦ ºü¸¥½Ã°£¿¡ ã¾Æ³»°í, »ç°¢Çü ¹Ú½ºÀÇ ¹æÇâÀ» ÀûÀýÇÏ°Ô Á¶ÀýÇÏ¿© ÅؽºÃÄ°¡ ´Ã¾î³ªÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.

download : tutorial14_decalmap.zip