游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2024|回复: 4

MAX插件导出材质采用什么方式好?

[复制链接]

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2009-4-5 22:42:00 | 显示全部楼层 |阅读模式
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;
}

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-4-5 22:45:00 | 显示全部楼层

Re:MAX插件导出材质采用什么方式好?

我就是利用INode来获取材质,但我觉得这种方式不好,有没有哪种就是能够全局获取材质的方法,还有能够全部遍历全部可用INode的代码要怎么写?

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-4-7 21:24:00 | 显示全部楼层

Re:MAX插件导出材质采用什么方式好?

大家都不愿意分享自己的经验吗?

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2009-4-8 09:20:00 | 显示全部楼层

Re:MAX插件导出材质采用什么方式好?

....为什么用INODE不好

45

主题

126

帖子

126

积分

注册会员

Rank: 2

积分
126
 楼主| 发表于 2009-4-9 13:21:00 | 显示全部楼层

Re:MAX插件导出材质采用什么方式好?

我想全局输出材质。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 14:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表