|
|
MAX插件导出材质采用什么方式好?下面是我写的,但有时能导出,有时又导不出,不知道怎么回事,
Tab <IGameMaterial*> m_pmaterials;
IGameMaterial *material=node->GetNodeMaterial();
m_pmaterials.Append(1,&material);
m_header.nNumMaterials=m_pmaterials.Count();
m_materials=new ModelMaterial[m_header.nNumMaterials];
Point3 p3;
Point4 p4;
PropType pt;
IGameProperty *p;
for (int i=0;i <m_pmaterials.Count();i++)
{
IGameMaterial *mtl=m_pmaterials;
if (i==0)
{
IGameTextureMap *tmap=mtl->GetIGameTextureMap(0);
if (tmap)
{
strcpy(m_header.chTexFileName,tmap->GetBitmapFileName());
strrev(m_header.chTexFileName);
strcat(m_header.chTexFileName,"\\.");
strrev(m_header.chTexFileName);
}
}
strcpy(m_materials.chName,mtl->GetMaterialName());
p=mtl->GetAmbientData();
if (p)
{
pt=p->GetType();
if (pt==IGAME_POINT3_PROP)
{
p->GetPropertyValue(p3);
m_materials.fAmbient[0]=p3.x;
m_materials.fAmbient[1]=p3.y;
m_materials.fAmbient[2]=p3.z;
m_materials.fAmbient[3]=1.0f;
}
if (pt==IGAME_POINT4_PROP)
{
p->GetPropertyValue(p4);
m_materials.fAmbient[0]=p4.x;
m_materials.fAmbient[1]=p4.y;
m_materials.fAmbient[2]=p4.z;
m_materials.fAmbient[3]=p4.w;
}
}
p=mtl->GetDiffuseData();
if (p)
{
pt=p->GetType();
if (pt==IGAME_POINT3_PROP)
{
p->GetPropertyValue(p3);
m_materials.fDiffuse[0]=p3.x;
m_materials.fDiffuse[1]=p3.y;
m_materials.fDiffuse[2]=p3.z;
m_materials.fDiffuse[3]=1.0f;
}
if (pt==IGAME_POINT4_PROP)
{
p->GetPropertyValue(p4);
m_materials.fDiffuse[0]=p4.x;
m_materials.fDiffuse[1]=p4.y;
m_materials.fDiffuse[2]=p4.z;
m_materials.fDiffuse[3]=p4.w;
}
}
p=mtl->GetSpecularData();
if (p)
{
pt=p->GetType();
if (pt==IGAME_POINT3_PROP)
{
p->GetPropertyValue(p3);
m_materials.fSpecular[0]=p3.x;
m_materials.fSpecular[1]=p3.y;
m_materials.fSpecular[2]=p3.z;
m_materials.fSpecular[3]=1.0f;
}
if (pt==IGAME_POINT4_PROP)
{
p->GetPropertyValue(p4);
m_materials.fSpecular[0]=p4.x;
m_materials.fSpecular[1]=p4.y;
m_materials.fSpecular[2]=p4.z;
m_materials.fSpecular[3]=p4.w;
}
}
p=mtl->GetEmissiveData();
if (p)
{
pt=p->GetType();
if (pt==IGAME_POINT3_PROP)
{
p->GetPropertyValue(p3);
m_materials.fEmissive[0]=p3.x;
m_materials.fEmissive[1]=p3.y;
m_materials.fEmissive[2]=p3.z;
m_materials.fEmissive[3]=1.0f;
}
if (pt==IGAME_POINT4_PROP)
{
p->GetPropertyValue(p4);
m_materials.fEmissive[0]=p4.x;
m_materials.fEmissive[1]=p4.y;
m_materials.fEmissive[2]=p4.z;
m_materials.fEmissive[3]=p4.w;
}
}
p=mtl->GetGlossinessData();
if (p)
{
float specularPower;
p->GetPropertyValue(specularPower);
m_materials.fSpecularPower=specularPower;
} |
|