首先,需要做好如下的准备工作:
1. 安装一个完整版本的3D MAX与Visual Stdio。
我安装的是3D MAX 2012,最好是找一个完整的版本,因为完整的版本中有很多的学习资料与sdk供学习,很省事。3D MAX的二次开发对VS的要求是有一个对应关系的,在SDK文档中可以找到,3D MAX 2012对应的VS开发版本应该是VS 2010,确保电脑上已经安装了VS 2010,我用的是vs2012,不过一样。
2.定制3D MAX plug-in向导。
a.找到安装目录的3dsmaxPluginWizard文件夹(我的安装目录是C:\Program Files\Autodesk\3ds Max 2012 SDK

\maxsdk\howto\3dsmaxPluginWizard
),
b.打开此目录下的MaxPluginWizard.vsz 文件,编辑ABSOLUTE  PATH参数为:

Param="ABSOLUTE_PATH=C:\Program Files\Autodesk\3ds Max 2012\SDK\maxsdk\howto\3dsmaxPluginWizard"

c.将3dsmaxPluginWizard文件夹下的三个文件3dsmaxPluginWizard.ico、3dsmaxPluginWizard.vsdir、3dsmaxPluginWizard.vsz拷贝到VS 2005安装目录的 VC  Projects 目录下,我电脑上的目录是C:\Program Files\Microsoft Visual Studio 12\VC\vcprojects。
d.启动VS 2012,File-New Project,选择Visual C++就可以看到3ds max Plugin Wizard选项,说明定制成功。
以上只是开发前的一些准备工作,都可以直接在3D MAX SDK的文档中直接找到,不过文档可都是英文的哦,要耐心的读下去。
在以上准备工作做好以后,就可以开始开发一个插件了,由简单到复杂,先做一个简单的插件程序。插件程序的编写有两种方法,一是用插件向导,就是刚才上面所说的;另一种是通过手工创建一个插件项目,在这里暂时只讨论用插件向导来开发,比较便捷,手工开发以后在补上。
1.第一步,生成一个插件程序的工程,具体如下:
a. 打开File —>New Project —>选择3ds max Plugin Wizard,输入project名字,如 “MyExport”。
b. 进入Welcome to the 3ds max Plugin Wizard 画面,选择plugin type如图所示:

c.这里显示各种插件类型,目前要做的是一个文件的导出插件,所以选择FileExport类型。
d.下一步,再出现一个对话框

max sdk的目录里面的框架放到vs目录下,然后新建项目就max的工程选项,方便建工程,少了配置步骤

选择file export,然后 配置路径

class MeshEnumProc : public ITreeEnumProc {
public: MeshEnumProc(const char *name,IScene *scene,Interface *i,DWORD options);
~MeshEnumProc(); int callback(INode *node);
void export(INode *node,TriObject *tri); FILE *file;
IScene *scene;
Interface *i;
int selected; int num_surfaces;
};

写一个类继承自 ITreeEnumProc,这个类有一个EnumTree方法,遍历所有的max场景节点,会调用callback方法

int MeshEnumProc::callback(INode *node)
{
if(selected && node->Selected() == FALSE) return TREE_CONTINUE;
Object *obj = node->EvalWorldState(i->GetTime()).obj;
if(obj->CanConvertToType(Class_ID(TRIOBJ_CLASS_ID,))) {
TriObject *tri = (TriObject*)obj->ConvertToType(i->GetTime(),Class_ID(TRIOBJ_CLASS_ID,));
export(node,tri);
if(obj != tri) delete tri;
}
return TREE_CONTINUE;
}

export方法写保存顶点数据和法线,贴图uv

doexport里面写这个类导出

int    Exp1::DoExport(const TCHAR *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts, DWORD options)
{
//#pragma message(TODO("Implement the actual file Export here and"))
/*
if(!suppressPrompts)
DialogBoxParam(hInstance,
MAKEINTRESOURCE(IDD_PANEL),
GetActiveWindow(),
Exp1OptionsDlgProc, (LPARAM)this);
*/ MessageBox(,"abc","Enter MeshEnumProc",MB_OK);
MeshEnumProc mesh(name,ei->theScene,i,options); return true;
}
const TCHAR *Exp1::Ext(int n)
{
//#pragma message(TODO("Return the 'i-th' file name extension (i.e. \"3DS\")."))
return _T("MiMesh");
}

这个是后缀名

编译完成后生成.dle文件,把它拷贝到max目录下的pugines文件夹 如:D:\Program Files\Autodesk\3ds Max 2012\plugins

3dmax里面编辑模型

导出选择

保存好文件,使用自己的框架加载显示

加入贴图后

Mtl *mat =_node->GetMtl();
if(!mat) //if not have material
return NULL; if(mat->ClassID()!=Class_ID(DMTL_CLASS_ID,))
return NULL;
//yes it's stdmat
StdMat *stdmat =(StdMat *)mat;
Texmap *texmap =stdmat->GetSubTexmap(ID_DI);
if(!texmap||(texmap->ClassID()!=Class_ID(BMTEX_CLASS_ID,)))
return NULL;
BitmapTex *bitmaptex =static_cast<BitmapTex*>(texmap);
const char *fullpath =bitmaptex->GetMapName();

max导出模型插件的更多相关文章

  1. 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》

    ds max文件夹,插件文件夹以及3ds max的可执行程序文件夹: 位的,这里要改成x64,否则启动程序后3ds max会提示"不是有效的win32程序"之类的对话框. 然后要将 ...

  2. 关于用Max导出Unity3D使用的FBX文件流程注解

    原地址:http://hi.baidu.com/phpstyle/item/c167a4c0694670b10d0a7b87 关于用Max导出Unity3D使用的FBX文件流程注解(转载) (2011 ...

  3. 用Max导出Unity3D使用的FBX文件流程注解(转载)

    http://www.cnblogs.com/wantnon/p/4564522.html 从max导出FBX到Unity,以下环节需要特别注意.1,单位设置   很多人在建模,动画的时候,默认的ma ...

  4. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  5. 支持10种格式的 HTML 表格导出 jQuery 插件

    HTML 表格导出 jQuery 插件可以帮助用户导出 HTML 表格到 JSON.XML.PNG.CSV.TXT.SQL.MS-Word.MS-Excel.MS-PowerPoint 和 PDF 格 ...

  6. Mac下导出chrome插件

    chrome最强大的功能之一就是插件,有时候需要给小伙伴们共享一些插件,所以需要将自己chrome中的插件打包,在mac下打包插件还是挺费劲的,在此记录. 打开chrome的扩展程序,找到要导出的插件 ...

  7. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  8. revit导出模型数据到sqlserver数据库

    revit软件可以导出模型数据到sqlserver数据库,有时候,为了对模型做数据分析,需要导出模型的数据,下面总结一下导出过程: 首先在sqlserver中建立一个数据库,如:revit_wujin ...

  9. 导出Excel插件——Export-CSV ---20150610

    出处:http://bbs.hcharts.cn/thread-99-1-1.html   导出Excel插件——Export-CSV 一.插件信息 插件名:Export-CSV(导出Execl文件) ...

随机推荐

  1. Apache重写RewriteCond

    RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始.基础的功能,为了方 ...

  2. JAVA-JSP内置对象之pageContext对象

    相关资料:<21天学通Java Web开发> pageContext对象1.pageContext对象不但可以用来设置page范围的属性,同样也可以用来设置其他范围属性,不过需要指定范围参 ...

  3. AutoLayout——何为intrinsic content size

    上一篇说到了约束就是等式和不等式.仅仅知道其原理还是没法拉出符合需求的线.所以这一篇主要看来什么是intrinsic content size,以及它有什么用. 在Xcode中,差点儿全部控件或视图, ...

  4. IO -阻塞,非阻塞, 同步,异步

    转载自: http://blog.csdn.net/historyasamirror/article/details/5778378 同步(synchronous) IO和异步(asynchronou ...

  5. <花荣《至尊狐狸》中国股市精英最优套利战术>读书笔记

    书在这里 第一定律:博弈分析是一切实战操作的基础,资金的机会利润由主力投机状态决定,资金的风险承受度由投资标的价值底线锁定 第二定律:套利战术应是背景性的.主动性的.互动性的,是最安全最保守的.最明确 ...

  6. android——官方下拉刷新组件SwipeRefreshLayout(转)

    一.问题描述 在android开发中,使用最多的数据刷新方式就是下拉刷新了,而完成此功能我们使用最多的就是第三方的开源库PullToRefresh.现如今,google也忍不住推出了自己的下拉组件Sw ...

  7. layui栅格布局问题

    在使用layer.open弹出到窗口中,使用布局一直不起作用. 开始到写法如下, 目的是一行分成左右两块,比例为8:4等分. <div class="layui-fluid" ...

  8. HttpWebRequest、HttpWebResponse获取网页

    1,通过HttpWebRequest.HttpWebResponse获取一个流 request = (HttpWebRequest)System.Net.WebRequest.Create(this. ...

  9. 防简单攻击iptables策略

    #!/bin/sh IPTABLES=/sbin/iptables # clear $IPTABLES -F # if pkg type is allow, then accept #$IPTABLE ...

  10. git 服务器新建仓库 远程仓库

    Git 服务器搭建 上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费. 这时我们就需要自己搭建一台Git服务器作为私有仓库使用 ...