关于.osm的导入

实际操作的时候发现,其实只需要利用TinyXML对其进行解析就行了,

而且只需要知道父子关系,位置,旋转,缩放,就足够了. 其他的摄象机,灯光之类就不需要管了.,

还是程序里面自己创建,进行控制好点.

下面都是从网上搜集的一些资料,.

第一个问题是,Max中东西与导出不一致的问题(位置偏差之类)

1.打开3dsmax,打开max文件
2.Edit -> Select All
3.Group -> Ungroup 重复此动作,直至Ungroup变成灰色
4.右边栏 -> Hierarchy -> Pivot -> Transform
5.右边栏 -> Utilities -> Reset XForm -> Reset Selected

1.打开max文件。<中文版>
2.编辑->全选。
3.组->解组。 重复些操作&#xff0c;直到“解组”变灰色。
4.右边栏->层->重置轴。
5.右边栏->层->变换。
6.保存

一般是没有 reset x form的问题&#xff0c;
另外在其他坛子看到的&#xff0c;Ofusion导出的时候材质有一些问题&#xff08;黑的或不显示什么的&#xff09;
一般都是没有使用Ofusion材质导致的&#xff0c;在导出的时候修改一下就可以了 &#xff1a;&#xff09;
其他应该还有一些问题&#xff0c;遇到再说。
(导出的后自己用LexiView查看一下&#xff0c;如果正确了一般问题就不大了)

第二个问题是&#xff0c;不知道怎么把导出的东西载入。
集中有以下几个问题&#xff0c;不知道怎么把mesh加载到程序里。
有笨办法&#xff1a;把mesh一个一个加到程序里&#xff08; 这个办法可真笨啊&#xff09;

好的办法&#xff1a;你注意以下Ofusion导出的文件中有一个OSM文件
打开他&#xff0c;开心了吧&#xff01;他其实是一个XML格式的文件&#xff0c;你可以用TinyXML试着去解析他&#xff08;不知道的看Ogre源代码或者Google&#xff09;
或者&#xff0c;去Ofusion官方下载一个osmload
好了&#xff0c;Ofusion官方还提供了一个demo教你如何使用那个库&#xff08;不是他是在Ogre1.2基础上做的&#xff0c;所以你检查一下你的版本

第三个问题&#xff0c;可能比较小众一点。
Ofusion导出库导出的东西就是一些静态模型&#xff0c;说的不太准确&#xff0c;意思就是你不能控制的。
如果你想去控制他&#xff0c;Ofusion也提供了一些方法&#xff0c;他提供了几个回调函数&#xff0c;可以让你控制实体&#xff0c;动画&#xff0c;摄像机&#xff0c;灯光等等。
你去实现这几个回调函数就可以控制了。如果你还想更方便一些&#xff0c;可以自己做编辑器或者买商业版本。

第四个问题&#xff0c;
Ofusion的这个库只提供load没提供unload&#xff0c;不过这个也并不难实现&#xff0c;你可以自己去写一个。

 

用记事本打开OgreSDK\bin\debug\resources.cfg&#xff0c;添加一行FileSystem&#61;你刚才那个文件夹的相对路径&#xff08;没试过绝对路径好不好使&#xff09;现在可以打开vc了&#xff0c;打开oFusion网站上提供的oScene loader demo application source code&#xff0c;网站上这个是for vc8.0的找到oSceneLibDemo.h文件中的createScene方法中的oScene.initialise("maxroom.osm", &oe_Callback);这一行&#xff0c;改变为你刚才保存的osm文件&#xff0c;编译&#xff0c;运行。你会发现会产生错误&#xff0c;不要奇怪&#xff0c;因为那时版本原因造成的&#xff0c;在ogre老版本中是通过自带的键盘输入实现键盘输入的&#xff0c;而新版本的ogre已经完全放弃自己的输入&#xff0c;改用OIS录入键盘&#xff0c;鼠标和摇杆输入&#xff0c;所以 将“if (mInputDevice->isKeyDown(KC_C) && timeDelay <&#61; 0) ”这一句改为“if (mKeyboard->isKeyDown(OIS::KC_C) && timeDelay <&#61; 0)”&#xff0c;再将此项目的附加依赖项中添加“OIS_d.lib”(如果你采用的是debug模式)&#xff0c;现在再编译运行试试看吧&#xff0c;应该没问题了吧&#xff01;&#xff01;&#xff01;

Ogre命令行工具包使用说明&#xff1a;

本文档由 自由骑士笃志 翻译整理,版权属于OgreTeam。转载请包含本行信息。
这个工具包包含了一些对Ogre资源文件进行操作的预处理命令行工具。
它包括OgreXMLConveter, OgreMeshUpgrade, OgreMaterialUpgrade和MeshMagick。
您可以在这里获得其WindowsV1.4.7版本的下载,或者在这里获取其MacOSXV1.4.0版本的下载。以上两个版本均是2008年3月6日的版本&#xff0c;即译者进行翻译的版本&#xff0c;若需要更多信息和更新的版本&#xff0c;可以访问Ogre官方
.[OgreXMLConveter]
OgreXML转换器能够将 .mesh 模型网格文件 和 .skeleton 骨骼文件 由XML格式转换为二进制格式&#xff0c;同时可以将其二进制格式转换回XML格式。它同时也允许你在将XML格式转换为二进制格式时设置LOD层级信息。
如果你的Ogre脚本资源中原本使用的就是XML格式文件的话&#xff0c;那么本工具则是Ogre运行时必须的。所以你能够在OgreSource包的Tools/XMLConverter中找到它。
使用方法&#xff1a;
OgreXMLConverter 操作选项 源文件路径 目标文件路径
有用的操作选项包括&#xff1a;
-i            &#61; 控制与命令行。
-l nLODNum &#61; 指定总LOD层级 ( 该项仅在XML格式转换为Mesh格式时有效 )
-d nLODDis &#61; 指定LOD层级间的距离增幅 ( 该项仅在XML格式转换为Mesh格式时有效 )
-p nLODPer &#61; 指定每两级LOD层之间三角面减少百分比 ( 该项仅在XML格式转换为Mesh格式时有效 )
-f nLODNum &#61; 指定两级LOD层之间的固定顶点减少量 ( 该项仅在XML格式转换为Mesh格式时有效 )
-e            &#61; 关闭模版阴影的edge表 ( 当使用模版阴影时该项才有效 )
-r            &#61; 关闭Ogre推荐的顶点缓冲区格式。
-t             &#61; 为法线贴图生成切线信息 ( 当使用法线贴图时该项才有效 )
-o            &#61; 关闭冗余关键桢和运动轨迹的剔除
-d3d          &#61; 优先使用D3D进行颜色格式的填充 ( 在Windows平台中默认该项开启 )
-gl           &#61; 优先使用GL进行颜色格式的填充 ( 在非Windows平台中默认该项开启 )
-E endian      &#61; 设置endian模式&#xff0c;可以选择big, little 或 native ( 默认为native )
-q            &#61; 轻量模式&#xff0c;减少输出。
-log filename   &#61; Log文件名称。&#xff08;默认为OgreXMLConverter.log&#xff09;
.[OgreMeshUpgrade]
这个工具能够将你的任何老版本的 .mesh 文件更新到当前版本的 .mesh 文件。
你可以在Ogre.log文件中得到.mesh文件的版本信息。一般来说&#xff0c;Ogre可以运行老版本的.mesh文件&#xff0c;但是性能上会有一些差别。如果你更新了Ogre的其他部分&#xff0c;你尽量应当将.mesh文件更新为同样的版本。
使用方法&#xff1a;
OgreMeshUpgrate 操作选项 源文件路径 目标文件路径
有用的操作选项包括&#xff1a;
-i            &#61; 控制与命令行。
-l nLODNum &#61; 指定总LOD层级 ( 该项仅在XML格式转换为Mesh格式时有效 )
-d nLODDis &#61; 指定LOD层级间的距离增幅 ( 该项仅在XML格式转换为Mesh格式时有效 )
-p nLODPer &#61; 指定每两级LOD层之间三角面减少百分比 ( 该项仅在XML格式转换为Mesh格式时有效 )
-f nLODNum &#61; 指定两级LOD层之间的固定顶点减少量 ( 该项仅在XML格式转换为Mesh格式时有效 )
-e            &#61; 关闭模版阴影的edge表
-r            &#61; 关闭Ogre推荐的顶点缓冲区格式。
-t             &#61; 为法线贴图生成切线信息
-d3d          &#61; 转换为D3D颜色格式
-gl           &#61; 转换为GL颜色格式
-srcd3d       &#61; 老版本的mesh文件为D3D颜色格式
-srcgl        &#61; 老版本的mesh文件为GL颜色格式
-E endian      &#61; 设置endian模式&#xff0c;可以选择big, little 或 native ( 默认为native )
注意&#xff1a;
这个工具现在允许你自定义重组你的mesh网格文件的顶点格式。
如果你想更新0.15.0之前的任意一个版本的mesh&#xff0c;那么在该程序运行时会问你是否希望进行顶点格式的重组&#xff0c;你输入’y’就可以了。在0.15.0版本之后的mesh在更新时会允许你对该mesh做更多的操作&#xff1a;例如&#xff0c;你可以对每个独立模型节点的顶点指定不同的顶点结构&#xff0c;你既可以自定义顶点结构&#xff0c;也可以使用’automatic’自动模式。
.[OgreMaterialUpgrade]
这个工具能够将你的任何老版本的 .material 材质文件更新到当前版本的 .material 材质文件。
值得注意的是这个自动更新是不会加入一些新的脚本语法功能的&#xff0c;这么说你可能不好理解。&#xff08;例子&#xff1a; “scene_blend add”这句可能会被更新为”scene_blend one one”&#xff0c;因为”add”的底层实际上就是”scene_blend one one”&#xff0c;自动更新会将一些高级语法更新为比较直接底层的语法&#xff09;
另外&#xff0c;这个工具仅对0.13.0版本以下的材质脚本更新有效&#xff0c;对0.13.0版本以后的材质脚本是没有必要进行更新的。
使用方法&#xff1a;
OgreMaterialUpgrade 源文件路径 目标文件路径
.[MeshMagick]
Copyright 2007 by Daniel Wickert
这个工具是对mesh文件和skeleton文件进行一些处理的工具。
大致包括以下功能&#xff1a;
Info         &#61; 输出mesh的信息。
Meshmerge   &#61; 将多个mesh合并为一个mesh文件
rename       &#61; 重命名mesh和skeleton的不同元件
transform     &#61; 旋转&#xff0c;缩放一个mesh
使用方式&#xff1a;
MeshMagick –help&#61;工具名 可以获得更多相关信息。
.[译者笃志补充说明]
1&#xff1a;除MeshMagick该工具外&#xff0c;其他三种工具&#xff0c;使用方式都可以是&#xff1a;将源资源文件拖拽到工具的exe图标上。因为更新程序会将源文件覆盖&#xff0c;所以推荐做下备份后再更新。
2&#xff1a;您可以写批处理文件对其进行使用。格式即为上面的使用方式。
举例&#xff1a;新建一个文本文件test.txt
编辑内容为 OgreMeshUpgrate –d3d –l 4 –d 500 –p 30 E:\Ogre\Media\TestSrc.xml F:\Temp\TestDest.mesh
修改文本后缀名为test.bat
将该批处理文件与OgreMeshUpgrate.exe放置同一目录下&#xff0c;运行
则会自动将E:\Ogre\Media\TestSrc.xml文件转换为F:\Temp\TestDest.mesh文件&#xff0c;同时开启了4层Lod&#xff0c;Lod间距为500象素&#xff0c;每一级间面数差距为30%
3&#xff1a;OgreMeshUpgrate工具推荐使用automatic自动模式顶点格式&#xff0c;效率会比较高&#xff0c;并且省去不少麻烦。
4&#xff1a;MeshMagick工具不推荐使用。本身功能有限&#xff0c;而且长期无人维护&#xff0c;对新的mesh支持不好。