一种基于3dmax脚本模型导出的实现方法

文档序号:6620734阅读:441来源:国知局
一种基于3dmax脚本模型导出的实现方法
【专利摘要】本发明公开了一种基于3DMAX脚本模型导出的实现方法,主要包括:获取场景模型相对于世界位置的矩阵信息和模型包围盒信息;基于场景模型相对于世界位置的矩阵信息和模型包围盒信息,把变换信息从OpenGL变换为DirectX矩阵,从脚本中导出三维模型供程序调用。本发明所述基于3DMAX脚本模型导出的实现方法,可以克服现有技术中成本高、开发效率低和适用范围小等缺陷,以实现成本低、开发效率高和适用范围广的优点。
【专利说明】-种基于3DMAX脚本模型导出的实现方法

【技术领域】
[0001] 本发明涉及计算机【技术领域】,具体地,涉及一种基于3DMAX脚本模型导出的实现 方法。

【背景技术】
[0002] 随着计算机的不断发展,带动了新兴的游戏产业从虚拟世界走向了真实的世界。 作为引擎技术的一项分支领域,脚本也是一个非常重要的模块,本发明提供了一种基于脚 本模型的导出方法,其主要依靠目前的三维软件制作的三维模型:例如:3DMAX,MAYA等,这 些模型中包含了模型的所有信息。对这些模型的变换需要一个复杂的变换。
[0003] 目前游戏市场应用软件多样化,对三维模型的导出更是随着三维软件和第三方插 件的多样化而不同,目前大多数游戏市场是通过一些工具人员撰写本引擎的插件,或者是 3DMAX使用的PandaDXExport插件导出.X文件,然后将模型发布的时候,根据模型的数据转 化成XPL格式。
[0004] 以上两种方式是一方面引擎开发周期长,对于人员流动大的公司,维护起来比较 困难另一方面是容易出现错误,需要反复的检查。
[0005] 基于目前模型导出出现的各种问题,需要提供一种基于DirectX的3DMAX脚本模 型的导出方法,以便适应所有程序员开发普遍实用、而且导出模型方便,也可以大大节约成 本,提1?开发效率。
[0006] 在实现本发明的过程中,发明人发现现有技术中至少存在成本高、开发效率低和 适用范围小等缺陷。


【发明内容】

[0007] 本发明的目的在于,针对上述问题,提出一种基于3DMAX脚本模型导出的实现方 法,以实现成本低、开发效率高和适用范围广的优点。
[0008] 为实现上述目的,本发明采用的技术方案是:一种基于3DMAX脚本模型导出的实 现方法,主要包括: a、 获取场景模型相对于世界位置的矩阵信息和模型包围盒信息; b、 基于场景模型相对于世界位置的矩阵信息和模型包围盒信息,把变换信息从OpenGL 变换为DirectX矩阵,从脚本中导出三维模型供程序调用。
[0009] 进一步地,所述步骤a,具体包括: al、设置场景中三维软件的模型信息; a2、基于场景中三维软件的模型信息,获取该模型信息的接口; a3、基于该模型信息的接口,获取场景对象的矩阵信息。
[0010] 进一步地,所述步骤al,具体包括: 将场景中的三维软件模型,按用途分为几何信息、材质信息以及蒙皮信息; 需要用脚本实现的模型,主要包括几何信息和材质信息以及蒙皮信息;其中: 几何信息包括顶点的位置信息、法线信息、颜色信息、Alpha信息、顶点受骨骼影响的权 重值,对于模型面的信息包括面的索引; 模型的材质信息包括模型面的U、V信息,以及每个面的贴图ID ; 蒙皮信息,通过该方法获得:获取模型的顶点数量,遍历模型中的每个顶点,依次获取 该顶点受那些权重值的影响。
[0011] 进一步地,所述步骤a2,具体包括: 获取顶点的局部坐标位置信息,考虑模型中心点pivot位置,程序是返回顶点的局部 位置信息local vertex ; 通过 in coordsys local getvert obj i,求得 local vertex ; 依次通过函数GetVertexNormals获得顶点的法线信息接口,通过GetVertexColor 获得顶点的颜色信息接口,通过GetVertexAlpha获得顶点的Alpha信息,通过 getFaceRNormals获得面法线信息; 对于蒙皮信息:分别从受顶点权重影响的骨骼ID接口(GetVertexWeightBonelD),获 得骨骼数量的接口(GetNumberBones),获得骨骼名称的接口(GetBoneName),获得顶点权 重的接口(GetVertexWeight)获得相应信息。
[0012] 进一步地,所述步骤a3,具体包括: 首先获取模型的世界位置的变换矩阵; 其次获得模型的世界矩阵信息; 然后获取模型的包围盒信息。
[0013] 进一步地,所述步骤b,具体包括: 基于DirectX的API接口信息,将场景模型相对于世界位置的矩阵信息和模型包围盒 信息中返回的世界矩阵转化为DirectX接口下; 把三维软件中的模型所有信息导入任何游戏引擎中使用。
[0014] 本发明各实施例的基于3DMAX脚本模型导出的实现方法,由于主要包括:获取场 景模型相对于世界位置的矩阵信息和模型包围盒信息;基于场景模型相对于世界位置的矩 阵信息和模型包围盒信息,把变换信息从OpenGL变换为DirectX矩阵,导出所需三维模型; 从而可以克服现有技术中成本高、开发效率低和适用范围小的缺陷,以实现成本低、开发效 率高和适用范围广的优点。
[0015] 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本发明而了解。
[0016] 下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

【专利附图】

【附图说明】
[0017] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实 施例一起用于解释本发明,并不构成对本发明的限制。在附图中: 图1为本发明基于3DMAX脚本模型导出的实现方法中从脚本导出模型的界面示意图; 图2为本发明基于3DMAX脚本模型导出的实现方法中基于脚本导出模型的流程图。

【具体实施方式】
[0018] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实 施例仅用于说明和解释本发明,并不用于限定本发明。
[0019] 根据本发明实施例,如图1和图2所示,提供了一种基于3DMAX脚本模型导出的实 现方法,属于三维模型的导出方法即通过三维软件脚本导出的特别方法。
[0020] 在虚拟的三维世界中,场景中我们所见所得的物件都可以视为"模型",而这些模 型在导出的时候能够保证完好无损的应用到游戏中,需要复杂的变换。首先了解一下所谓 的游戏中模型,虚拟的来模拟现实人物,场景,我们都称为模型;这些是计算机图形学的产 物,那么导出的一个完整的模型信息会携带网格蒙皮信息,骨骼信息和关键帧信息,蒙皮信 息是模型的多边形信息,这些模型信息一般都是顶点构成,这些顶点中包含了顶点位置,法 线信息和纹理材质信息以及哪些骨骼影响了该点和影响权重值等。骨骼信息就是这个模型 所有的骨骼组成一个骨骼树。关键帧信息包含了组成骨骼运动的关键帧序列,可以确定某 一个时刻每个骨骼的新的位置和朝向。导出模型之后需要记录模型中心点的坐标值,任何 将模型的中心点归零在导出。
[0021] 第一:概括三维软件导出模型信息: 一个模型按用途可分为几何信息、材质信息以及蒙皮信息构成。
[0022] 对于我们需要用脚本实现的模型主要包括几何信息和材质信息以及蒙皮信息 几何信息包括顶点的位置信息,法线信息,颜色信息,Alpha信息,顶点受骨骼影响的权 重值,对于模型面的信息包括面的索引。
[0023] 模型的材质信息包括模型面的U、V信息,每个面的贴图ID。
[0024] 蒙皮信息:是将网格中的顶点附着在骨骼之上,而且每个顶点可以被多个骨骼控 制,通过获取模型的顶点数量,遍历模型中的每个顶点,依次获取该顶点受那些权重值的影 响。
[0025] 第二:获取模型各类信息的接口信息: 具体获取的函数如下: 获取顶点的局部坐标位置信息,考虑模型中心点(Pivot)位置,程序是返回顶点的局部 位置信息(local vertex)。通过in coordsys local getvert obj i,就可以很容易地求得 local vertex,但是,3D MAX三维软件中的pivot不是local坐标系的原点,只是旋转的 中心轴.通过以下脚本的算法可以得到: fn GetLocalVertices obj = ( varSetVertex= #() TM = obj.transform InvTM = inverse TM for i = 1 to obj. numverts do ( local vl - vertex local local vw - vertex world vw = in coordsys world getvert obj i vl = vw * InvTM append varSetVertex vl ) varSetVertex ), 依次通过函数GetVertexNormals获得顶点的法线信息接口,通过GetVertexColor 获得顶点的颜色信息接口,通过GetVertexAlpha获得顶点的Alpha信息。通过 getFaceRNormals获得面法线信息。
[0026] 对于蒙皮信息:分别从 GetVertexWeightBonelD,GetNumberBones,GetBoneName, GetVertexWeight获得受顶点权重影响的骨骼ID,骨骼名字以及骨骼权重值。
[0027] 第三:获取场景对象的矩阵。
[0028] 首先获取模型的世界位置的变换矩阵: XMLElementBegin nTabCount g-strLocalTM true tm = m_oUtil. ConvertToD3D_TM (m_oUtil. GetLocalTM obj) XMLElementBegin (nTabCount+1) g-strValue false format 〃[%,%,%,%]〃 tm. _11 tm. _12 tm. _13 tm. _14 to:m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -21 tm. -22 tm. -23 tm. -24 to:m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -31 tm. -32 tm. -33 tm. -34 to:m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -41 tm. -42 tm. -43 tm. -44 to :m-fileTarget XMLElementEnd 0 g-strValue XMLElementEnd nTabCount g-strLocalTM 其次获得模型的世界矩阵信息: XMLElementBegin nTabCount g-strWorldTM true tm = m_oUtil. ConvertToD3D_TM (obj. transform) XMLElementBegin (nTabCount+1) g-strValue false format 〃[%,%,%,%]〃 tm. _11 tm. _12 tm. _13 tm. _14 to :m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -21 tm. -22 tm. -23 tm. -24 to:m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -31 tm. -32 tm. -33 tm. -34 to:m-fileTarget XMLElementEnd 0 g-strValue XMLElementBegin (nTabCount+1) g-strValue false format "[%,%,%,%]〃 tm. -41 tm. -42 tm. -43 tm. -44 to :m-fileTarget XMLElementEnd 0 g-strValue XMLElementEnd nTabCount g-strWorldTM StackClearAttr () 然后获取模型的包围盒信息: XMLElementBegin nTabCount g-strBoundingBox true invTM = inverse (obj. transform) XMLElementBegin (nTabCount+1) g-strMax false format 〃%" (m-oUtil.ConvertToD3D-P0S (obj. max * invTM)) to:m-fileTarget XMLElementEnd 0 g-strMax XMLElementBegin (nTabCount+1) g-strMin false format 〃%" (m-oUtil.ConvertToD3D-P0S (obj. min * invTM)) to:m-fileTarget XMLElementEnd 0 g-strMin XMLElementBegin (nTabCount+1) g-strCenter false format 〃%" (m-oUtil.ConvertToD3D-P0S (obj. center * invTM)) to:m-fileTarget XMLElementEnd 0 g-strCenter XMLElementEnd nTabCount g-strBoundingBox 通过这个三个主要的步骤,就可以得到模型的相对于世界位置的矩阵信息和模型包围 盒信息。
[0029] 第四:把变换信息从OpenGL变换为DirectX矩阵: 本发明是基于DirectX的API接口信息,就把上述基于返回的世界矩阵转化为DirectX 接口下才可以应用,然后把这些MAX中的脚本信息导出到XML中供程序使用,如图1。通过 最后一步的转换,我们就可以把三维软件中的模型所有信息都可以导入任何游戏引擎中使 用。
[0030] 本发明的技术方案,提供的一种基于3dMAX脚本模型导出的方法,适合与所有程 序人员开发和维护,至少具有简单、灵活、执行速度快和运行效率高的优点。
[0031] 最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明, 尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可 以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
【权利要求】
1. 一种基于3DMAX脚本模型导出的实现方法,其特征在于,主要包括: a、 获取场景模型相对于世界位置的矩阵信息和模型包围盒信息; b、 基于场景模型相对于世界位置的矩阵信息和模型包围盒信息,把变换信息从OpenGL 变换为DirectX矩阵,从脚本中导出三维模型供程序调用。
2. 根据权利要求1所述的基于3DMAX脚本模型导出的实现方法,其特征在于,所述步骤 a,具体包括: al、设置场景中三维软件的模型信息; a2、基于场景中三维软件的模型信息,获取该模型信息的接口; a3、基于该模型信息的接口,获取场景对象的矩阵信息。
3. 根据权利要求2所述的基于3DMAX脚本模型导出的实现方法,其特征在于,所述步骤 al,具体包括: 将场景中的三维软件模型,按用途分为几何信息、材质信息以及蒙皮信息; 需要用脚本实现的模型,主要包括几何信息和材质信息以及蒙皮信息;其中: 几何信息包括顶点的位置信息、法线信息、颜色信息、Alpha信息、顶点受骨骼影响的权 重值,对于模型面的信息包括面的索引; 模型的材质信息包括模型面的U、V信息,以及每个面的贴图ID ; 蒙皮信息,是将网格中的顶点附着在骨骼之上,而且每个顶点可以被多个骨骼控制,通 过获取模型的顶点数量,遍历模型中的每个顶点,依次获取该顶点受那些权重值的影响。
4. 根据权利要求3所述的基于3DMAX脚本模型导出的实现方法,其特征在于,所述步骤 a2,具体包括: 获取顶点的局部坐标位置信息,考虑模型中心点pivot位置,程序是返回顶点的局部 位置信息local vertex ; 通过 in coordsys local getvert obj i,求得 local vertex ; 依次通过函数GetVertexNormals获得顶点的法线信息接口,通过GetVertexColor 获得顶点的颜色信息接口,通过GetVertexAlpha获得顶点的Alpha信息,通过 getFaceRNormals获得面法线信息; 对于蒙皮信息:分别从受顶点权重影响的骨骼ID接口 GetVertexWeightBonelD、获得 骨骼数量的接口 GetNumberBones、获得骨骼名称的接口 GetBoneName、以及获得顶点权重 的接口 GetVertexWeight获得相应信息。
5. 根据权利要求4所述的基于3DMAX脚本模型导出的实现方法,其特征在于,所述步骤 a3,具体包括: 首先获取模型的世界位置的变换矩阵; 其次获得模型的世界矩阵信息; 然后获取模型的包围盒信息。
6. 根据权利要求1-5中任一项所述的基于3DMAX脚本模型导出的实现方法,其特征在 于,所述步骤b,具体包括: 基于DirectX的API接口信息,将场景模型相对于世界位置的矩阵信息和模型包围盒 信息中返回的世界矩阵转化为DirectX接口下; 把三维软件中的模型所有信息导入任何游戏引擎中使用。
【文档编号】G06Q50/06GK104112017SQ201410345679
【公开日】2014年10月22日 申请日期:2014年7月21日 优先权日:2014年7月21日
【发明者】张翼 申请人:无锡梵天信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1