热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3DsMax导出插件编写(1)环境搭建

??为3D开发人员,特别是3D引擎开发人员,经常会接触到各种三维模型的数据。虽然说3dsmax已经可以导出很多格式的模型,不过总是不一定合适自己用。所以总有一种想自己写一个导出

为3D开发人员,特别是3D引擎开发人员,经常会接触到各种三维模型的数据。虽然说3dsmax已经可以导出很多格式的模型,不过总是不一定合适自己用。所以总有一种想自己写一个导出插件,让3dmax导出自己想要的数据格式。这里为大家介绍一下怎样为3dmax写导出插件的第一步:怎样配置vs和maxSdk。
这里你需要的东西有两个:
1、一个完整版的3dsMax。
2、一个Visual Studio。
为什么是要完整版的3dsMax呢?这是因为完整版本的3dsMax的安装文件自带有maxSdk。这是很重要的。不同版本的3dsMax,带的sdk会不一样。你拿了其他版本的sdk做了的插件,不一定适合你当前的3dsmax使用的。很多人写这个配置教程,会告诉你上网去找maxSdk。其实不需要这么麻烦的。下面会告诉大家怎样安装。我这里拿的是我当前使用的3dsMax2011的64位版来做示范。其他的版本做法是一样的。
那么Visual Studio有什么要求呢?有些人写的教程会告诉你,每个版本的max的sdk会对应不同版本的vs,最好对应。这样说也不算错。不过其实这个对应关系没那么严格的,我下面会告诉大家怎样跨版本配置。比如max2011的sdk对应的是vs2008,我下面将会用vs2010来配置。

好,把上面2样东西准备好之后,3dsmax正常安装,vs也正常安装,准备工作就完成了,接下来阿赵和大家就一起来装这个maxSdk:
运行完整版本的3dsMax安装文件,会看到以下界面,我们选择“安装工具和实用程序”:
技术分享
 在这里选择需要安装的工具,我们需要的是3ds max 2011的sdk:
技术分享
 
安装完之后,会在安装目录找到一个howto文件夹,里面有个3dsmaxPluginWizard文件夹,在里面有个readme.txt文档,文档里面说明了怎么去配置这个sdk的。其实在安装完之后,我们可以把这个maxsdk的文件夹随便的移动到我们想要的地方的。不过在配置之前,最好先移动好,开始配置之后,就别动这个文件夹的路径了。
技术分享
 
在配置之前,这个文件夹的属性是只读的,我们先把整个文件夹的只读取消,然后开始配置:
使用记事本打开同文件夹下的3dsmaxPluginWizard.vsz,然后找到下图用红线下划的地方。
默认的Wizard=VsWizardEngine.9.0,代表的是对应vs2008版本。我现在需要使用2010版本,所以把它改成了10.0
然后下面的ABSOLUTE_PATH改成当前的3dsmaxPluginWizard文件夹的路径:
技术分享
 
改完之后,我们把3dsmaxPluginWizard文件夹下的这三个文件复制:
技术分享
 
然后找到vs2010的安装文件夹,找到VC/vcprojects文件夹,把刚才复制的三个文件放到这个文件夹下:
技术分享
 
然后我们就可以打开vs2010,创建新项目。这时候会在c++项目里面看到了3dsmax插件的类别,选择它,然后在下面的项目名称和路径里面输入自己想要的名字和路径。
技术分享
 
如果你之前的配置正确,将会弹出设置向导,如果没有弹出,则要检查之前的步骤了。我们选择File Export:
技术分享
 
这里是插件的详情,直接下一步就行:
技术分享
 
这里是项目详情,第一项输入maxsdk的路径,第二项输入插件想输出的路径,比如3dsmax安装目录的plugins文件夹,第三项输入需要调试的3dsmax的安装目录。三项都是可以在项目建立之后修改的。
技术分享

按finish后,由于这个版本的sdk对应的是vs2008,现在我用的是2010,所以有一个转换版本的过程(我用的vs2013,sdk2012,没有这步)
技术分享
 
这时候,项目应该已经创建成功。如果没有创建成功,则检查之前的步骤。通常是因为3dsmaxPluginWizard.vsz里面的vs版本设置错误。如果创建成功后,我们在解决方案资源管理器里面找到你的项目的cpp,打开。
技术分享
 


 在cpp里面,修改Ext方法里面的返回,这里是你导出的模型的格式后缀名,这里我是改成了”azhao“,再改ShortDesc方法里面的返回,这里是模型的描述,我改成了”阿赵的模型格式“。
技术分享
 
现在按调试,会弹出错误:
技术分享

 这是因为调试的目标没有设置正确,可以找到项目属性修改:
技术分享
 在配置属性里面的调试,修改命令项为你的3dsmax.exe路径:
技术分享

按道理,现在我们再开始调试,你的3dsmax就会启动了。如果你是为32位的3dsmax做配置,那么整个配置过程已经完成了。
但我这里3dsmax启动后报错了,这是因为我的3dsmax是64位的,刚才调试生成的32位插件不能用。
技术分享
 
接下来我们将要把项目改成64位的。先打开项目属性,在配置管理器里面,把Win32改成x64:
技术分享
 
改完之后,之前我们的所有配置都没了,需要逐个去配置:
先配置调试程序路径:
技术分享
 然后配置输出路径
技术分享
 配置生成程序数据库文件的路径
技术分享
 
好了,64位修改完成,我们再次进行调试,3dsmax应该就能正常打开了。
这里我编译有问题,提示error MSB8009:答题内容就是我的vs2013不能打开2008的东西,就是说plaeform tools不对,解决如下:
1、打开工程。
2、右击工程并选择 ‘Properties(属性)‘。在属性窗口的左边面板, 展开‘(Configuration Properties)‘ 并选择‘(General)‘.
3、右边面板中, 将“(Platform Toolset)”的值从v90 改为 v120(改成自己支持的就可以) ,点击(OK)。
4、在Solution Explorer(解决方案资源管理器)”中,打开“StdAfx.h”文件,将“_WIN32_WINNT”的值从0x0400改为0x0501,。

我们随便在场景里面建立一个茶壶,然后导出。现在我们可以在选择导出格式的地方,找到我们刚才指定的格式了,就是”阿赵的模型格式“,后缀名是”azhao“。
技术分享
 
确定保存,会打开一个对话框,不过里面都是一些默认的东西,没有任何内容的,因为我们只是完成了配置的步骤,没有开始写导出的实际内容。
技术分享
 
在vs里面找到DoExport方法,在里面打一个断点。再次去选择导出我们的格式,vs应该就能进入断点了。DoExport方法就是导出方法的入口了。
技术分享
 
如果你途中发现出现问题,很有可能是以下几种问题:
1、下载的MaxSdk有问题,建议使用完整版3dsMax自带的sdk。
2、忘记取消maxSdk文件夹的只读属性,这样在新建项目或者编译的时候都会出错。
3、3dsmaxPluginWizard.vsz里面设置的vs版本不对。9.0对应的是vs2008,10.0对应的是vs2010,11.0对应的是vs2012.
4、调试的时候出错,有可能是没有设置对调试对象,要设置为3dsMax的exe。
5、调试的时候没有报错,却没有出现导出的选择。有可能是导出保存的路径不对,要保存在3dsmax的安装路径里面的插件文件夹,比如plugins或者stdplugs文件夹。
6、调试的时候3dsmax启动了,但在启动的途中报错。这有可能是使用的sdk和3dsMax版本不对应,或者是32位插件和64位软件不对应。
这个过程虽然简单,不过却会遇到很多默默奇妙的小问题,网上虽然相关的教程不少,但起码我自己对着很多个教程都没有配置成功,所以才把自己的配置过程记录下来,希望能给以后需要配置的人一个参考。

3DsMax导出插件编写-(1)环境搭建


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
落单鸟人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有