¸Æ½º¿¡¼ ÀçÁú°ú ´ÙÀÌ·ºÆ® XÀÇ ÀçÁúÀÇ °³³äÀº ´Ù¸£´Ù. ¸Æ½º¿¡¼ ÀçÁúÀº ÇϳªÀÇ ¸Þ½¬´ç ¿©·¯°³ÀÇ ÀçÁúÀ» °¡Áú¼ö ÀÖ´Ù. DX¿¡¼´Â ÀçÁú°ú ÅؽºÃÄ°¡ ºÐ¸® µÇ¾î ÀÖÁö¸¸ ¸Æ½º¿¡¼´Â ÀçÁú¿¡ ÅؽºÃÄ°¡ Æ÷ÇÔ µÈ´Ù.
¸Æ½ºÀÇ ÀçÁúÀ» °ÔÀÓ¿¡¼ ±×´ë·Î ±¸ÇöÇß´Ù°£ Ç÷¾Ð »ó½Â°ú °ÔÀÓ ÃÖÀûȸ¦ °¨´çÇÒ ¼ö ¾ø±â ¶§¹®¿¡ µðÇ»Áî ¸Ê¸¸ ÀͽºÆ÷Æ® Çϵµ·Ï ÇÑ´Ù.
½ÇÇà ¼ø¼: BuildMaterial() --> CollectMaterial() --> WriteMaterial() °£´ÜÇÏ°Ô ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°´Ù.
Export ¸ÞÀÎÇÔ¼ö¿¡¼ ºÎ¸£´Â ÇÔ¼ö·Î XmlExp¸¦ ÀڽıîÁö Àç±Í È£Ãâ ÇÑ´Ù.
m_pINode->GetMtl() ¸ÞÆ®¸®¾óÀÌ ÀÖÀ¸¸é CollectMaterial()À» ½ÇÇàÇÑ´Ù.
void XmlExp::BuildMaterial()
pMtl->NumSubTexmaps() ¸ÞÆ®¸®¾óÀÇ ¼ºê ÅؽºÃÄ°¡ ÀÖ°í µðÇ»Áî ¸ÊÀ̸é WriteMaterial()À» ½ÇÇà
void XmlExp::CollectMaterial( INode* pNode, Mtl* pMtl )
µðÇ»Áî ¸Ê(ID_DI)À̸é ÅؽºÃÄ À̸§°ú ÀçÁúÀ» ÀúÀå
void XmlExp::WriteMaterial( Mtl* pMtl, Texmap* texMap, int nSubID )
|
BuildMaterial
INode::GetMtl() : ¸ÞÆ®¸®¾ó(Mtl)À» ¸®ÅÏÇÑ´Ù.
void XmlExp::BuildMaterial()
{
if( m_pINode )
{
Mtl* pMtl = m_pINode->GetMtl();
CollectMaterial( m_pINode, pMtl );
}
.......
Àç±Í È£Ãâ: BuildMaterial()
}
|
CollectMaterial
Mtl::NumSubTexmaps() : ÅؽºÃÄÀÇ °¹¼ö¸¦ ±¸ÇÑ´Ù. Mtl::GetSubTexmap() : TexmapÀ» ¸®ÅÏÇÑ´Ù. Mtl::NumSubMtls() : ¼ºê ÀçÁúÀÇ °¹¼ö¸¦ ±¸ÇÑ´Ù. Mtl::GetSubMtl() : ¼ºê ÀçÁú MtlÀ» ¸®ÅÏÇÑ´Ù.
¸Æ½º¿¡¼ ÀçÁúÀº INode ó·³ Æ®¸®±¸Á¶·Î µÇ¾î ÀÖ´Ù. ±×·¡¼ GetSubMtl()·Î °è¼Ó ¼øȸÇÏ¸é¼ µðÇ»Áî ¸ÊÀ» °Ë»öÇÑ´Ù.
void XmlExp::CollectMaterial( INode* pNode, Mtl* pMtl )
{
if( pMtl == NULL )
return;
int nSub = pMtl->NumSubTexmaps();
for( int n=0; n<nSub; ++n )
{
Texmap* subTexMap = pMtl->GetSubTexmap(n);
if( subTexMap == NULL )
continue;
WriteMaterial( pMtl, subTexMap, n );
}
int iSub = pMtl->NumSubMtls();
for(int i=0; i < iSub; ++i)
{
Mtl* pSubMtl = pMtl->GetSubMtl(i);
CollectMaterial( m_pINode, pSubMtl );
}
}
|
WriteMaterial
ÅؽºÃĸÊÀÇ ID°¡ Class_ID(BMTEX_CLASS_ID, 0x0)À̸é À̹ÌÁö ÆÄÀÏÀÌ´Ù. SubTexmapÀÇ ID°¡ ID_DIÀÌ¸é µðÇ»Áî ¸ÊÀ¸·Î À̶§ ÅؽºÃÄ À̸§°ú ÀçÁúÀÇ Ambient, Diffuse, Specular °ªÀ» ÀúÀåÇÑ´Ù.
void XmlExp::WriteMaterial( Mtl* pMtl, Texmap* texMap, int nSubID )
{
if (texMap->ClassID() == Class_ID(BMTEX_CLASS_ID, 0x0))
{
//°æ·Î¸¦ Æ÷ÇÔÇÑ °æ·Î
TSTR bitmapFile = ((BitmapTex *)texMap)->GetMapName();
if( bitmapFile.data() && strlen(bitmapFile) > 3 )
{
TSTR className;
texMap->GetClassName(className);
TSTR fileName;
SplitPathFile(bitmapFile, NULL, &fileName);
if(ID_DI == nSubID) // diffuse Map
{
XmlExp* meshXmlExp = (XmlExp*)this->FindFirstChild( "mesh" );
if( meshXmlExp )
{
//ÅؽºÃÄ À̸§ ÀúÀå, bitmapFileÀ̳ª fileNameÀ» ÀúÀå
Color c = pMtl->GetAmbient();
c = pMtl->GetDiffuse();
c = pMtl->GetSpecular();
........
}
}
}
}
}
|
ÇÁ·ÎÁ§Æ® : maxProject_material.zip
|