[转]使用OgreMax导出自定义数据

http://ranjiao.com/blog/index.php/2009/ogremax%E4%BD%BF%E7%94%A8%E7%BB%8F%E9%AA%8C/

 

自定义数据

使用OgreMax很重要的一点就是导出自定义数据。要做到这一点首先需要自己写一个xml文档来说明自定义数据的类型,在OgreMax文档的"Custom User Data Types"页面中有很详细的例子,比如下面是我正在做的项目中截出来的一段:

<userDataTypes>
<class name="charactor" displayName="角色 " usage="private">
<data name="name" displayName="名称 " type="string"/>
<data name="wayname" displayName="路径名 " type="string"/>
<data name="meshname" displayName="模型名称 " type="string"/>
<data name="common_skeleton" displayName="公用骨骼 " type="bool" defaultValue="true"/>
</class>
</userDataTypes>

在OgreMax->Object Settings->User Data中载入以后就可以在type中选择"角色"类型了,并且会按照xml中定义的数据显示。
导出以后在.scene文件中会有类似如下的xml块:

<![CDATA[
<player>
<name>DefaultPlayer</name>
<wayname></wayname>
<common_skeleton>true</common_skeleton>
<meshname>robot</meshname>
</player>
]]>

上面这一段CDATA可能包含在一个Entity或者Node节点中,具体取决与你在OgreMax中的设置。

 

物体属性设置

前面也提到了,在OgreMax->Object Settings中可以对导出物体的属性进行设置。这里介绍一下其中比较重要的一些选项。

General
  • Type 这一项决定了导出物体在.scene文件中的类型。最常用的是Entity/Mesh,这个类型在导出以后会生成一个node以及挂载在该node上面的entity,同时会把3ds
    max中的该物体导出为一个.mesh文件。然后就比较常用的就是Empty,这种类型会导出为一个没有挂任何东西的node。比如说我用一个box来代表NPC出现的位置,那么这个box就可以设置为Empty类型。
  • Rendering 在这里设置物体的可见性、渲染顺序、shader参数等等
Node Animation

在这里设置物体的Node动画,即位置、旋转、缩放上的动画。物体模型本身变化的动画在Mesh Animation中设置。具体的用法还没有仔细研究。

User Data

自己游戏所需要的自定义数据就在这里设置了。点Configure…按钮添加上面所说的userdatatypes.xml文件以后,User Data Class中就会出现自定义的数据类型。这样就可以直接把3ds
max作为一个关卡编辑器来使用了。虽说还是没有专门的编辑器那么方便,不过大多数情况下还是够用了。

Mesh

Mesh Name和Skeleton Name可以制定输出的模型和骨骼的文件名,如果不指定的话则会以3ds max中物体的名字命名。

Mesh Animation

这里用来设置顶点动画或骨骼动画。可以把整个场景中物体的任意某一段动画制定某个名字以供程序调用。点击Add..会弹出Animation Settings窗口。通常其中的Track类型已经设置好了,骨骼动画是Physicue, 定点动画是Morph。只需要制定动作的起始帧号就可以了。要注意的是一个场景中某个物体的骨骼动画只能导出为一个skeleton文件,如果你需要把不同的动作导出为不同的动画的话,需要把骨骼动画保存为不同的max文件然后飞别导出。

 

自定义文件的读取

OgreMax提供了从3ds max中导出为.scene文件的机制,然是我们还是缺一个读取它的程序。虽然OgreMax中自带了一个Viewer程序,但是要处理自定义数据显然还是得自己动手写一个。这里可以参考Ogre
Wiki中的一个.scene文件读取程序的例子,在它的基础上进行修改:

http://www.ogre3d.org/wiki/index.php/New_DotScene_Loader

但是这个程序在很多地方都只是写了一个函数名而没有实现,并且对场景文件的处理和OgreMax导出的格式还是有所区别,需要自己进行大量修改。这里附上我自己的场景读取程序:SceneLoader

 

To obtain the "extra" data stored in objects call the OgreMaxScene::GetObjectExtraData() method, passing in the object. A pointer to the extra data is returned. The pointer does not need to be deleted. It will, however, be deleted if the OgreMaxScene that loaded it is deleted.

posted @ 2012-06-19 18:22  Pulaski  阅读(385)  评论(0编辑  收藏  举报