【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 5253|回复: 4

OgreMax导出并显示Max文件的静态模型和动画模型(一)

[复制链接]
发表于 2009-8-3 11:04:55 | 显示全部楼层 |阅读模式
 引言

当用ANG="EN-US">3DMax软件建立好模型后,其中有静态模型也有动画模型,通过ANG="EN-US">OgreMax这个ANG="EN-US">3DMax插件,可以很容易地将场景导入到ANG="EN-US">Ogre中进行渲染,接下来我们就看看如何使用ANG="EN-US">OgreMax导入模型到ANG="EN-US">Ogre中,并在Ogre中进行渲染。

ANG="EN-US"> 

ANG="EN-US">2 OgreMax的使用

测试环境:ANG="EN-US">vc2003ANG="EN-US">OgreMax 1.6.23 3DMax9

(1)导出max模型为scene文件

首先下载ogremax,并进行安装.成功安装后打开3DMax9,会在菜单中多出一项“OgreMax”,如下图所示点击Export->Export Scene就可以导出模型为.scene文件

 

 

 

OgreMax-1.6.23\OgreMax\Common\Media\3DSMax9下提供了各种max模型,这对于像我这种max基本不会的人来说真是方便了不少。上图中的max模型就是这个文件夹下的MeshAnimation.max。有的.max模型使用了贴图,这时候有可能出现贴图丢失的情况,如下图所示

 

 

点击确定,这时候只要在弹出的对话框中指定好OgreMax的贴图路径就可以了,我自己的绝对路径是

E:\project\Work\OGRE\Document\OgreMax\OgreMax-1.6.23\OgreMax\Common\Media

具体如下图所示

 

 

如果需要导出max模型中的动画,需要做一些设置,具体可以参看OgreMax-1.6.23安装后的OgreMaxSceneExporter.chm文件中的这一节。

 

 OgreMax-1.6.23中自带的max模型已经帮我们设置好了,所以我们可以直接导出,导出后的文件如图 所示,将这些文件导出到文件夹中,注意,其绝对路径一定要全英文的,不能出现注诸如D:\模型\1  这样含中文的路径,否则等下用OgreMaxWinViewer.exe打开会出现如下异常

 

 

 

在上面的这些文件当中,1.scene是个xml文件,其内容相当于一个索引文件, 记录了模型的位置,旋转角度,缩放比例,名称等信息,而.mesh是模型文件,.skeleton是骨骼文件,用于动画,.material文件则记录了模型使用的贴图和材质信息。

 

(2)  OgreMaxWinViewer.exe观察模型

打开OgreMax-1.6.23\OgreMax\OgreMaxWinViewer\Projects\VisualStudio路径下的OgreMaxWinViewer.exe文件,然后打开文件,选取好scene文件

 

 

点击OK后可以看到下图,说明导出的文件能正常显示,如图选中相应的×××(Animation),并且在下面的Enable复选框中勾,可以看到相应的模型动画,其中×××是动作的名称,要想知道如何用鼠标或者手柄控制视角请参看

OgreMax\Documents\OgreMaxWinViewer\index.htmlControl这一节 的帮助文档。

 

 

 

 

 楼主| 发表于 2009-8-3 11:05:36 | 显示全部楼层

ANG="EN-US">3 ANG="EN-US">Ogre程序中显示ANG="EN-US">scene场景ANG="EN-US">

ANG="EN-US"> (1)ANG="EN-US">\Common\Code路径下找到图片中列出来的文件,放到自己程序目录中

ANG="EN-US">2同时把解析ANG="EN-US">XMLANG="EN-US">tinyxml相关文件负责知道程序目录,如下图所示

 

ANG="EN-US"> 3把以上文件加到项目中,编译应该是通过的。

 4)显示场景

  1.scene等文件拷贝到resources.cfg指定的任何一个路径下,以保证Resources Group能够找到这些文件,下面直接贴出我载入场景的代码

#include "OgreMaxModel.hpp"

#include "OgreMaxScene.hpp"

void createScene(void)

{

    ... ...

         m_maxScene = new OgreMax::OgreMaxScene();

          // 1.scene是导出的场景文件名,,当然你也可以用绝对路径,但不建议那样做。

          m_maxScene->Load("1.scene",mWindow,OgreMax::OgreMaxScene::NO_OPTIONS, 0, 0); 

         // 读取Max文件中的设定的Camera

         mSceneMgr = m_maxScene->GetSceneManager();

         mCamera = mSceneMgr->getCamera("Camera02"); // 1.scene文件中指定的照相机名称

         Viewport* vp = mWindow->addViewport(mCamera);

         vp->setBackgroundColour(ColourValue(0,0,0));

         mCamera->setAspectRatio(Real(vp->getActualWidth())/Real(vp->getActualHeight()));

    ... ...

}

 

由于我在createScene()使用了max场景中“Camera02”这个照相机,所以就没有在createCamera这个方法内设置照相机了。最终效果如下图所示 

 楼主| 发表于 2009-8-3 11:06:19 | 显示全部楼层

ANG="EN-US">(5) 显示模型动画

这个其实挺简单的,由于ANG="EN-US">MeshAnimation.max中一共有四个动画,这里只以上图中最前面的这个“小人”为例,说明下如何显示动画,代码如下:

ANG="EN-US">AnimationState* mAnimationState; // 声明为ANG="EN-US">TutorialListenerANG="EN-US">private成员

 

ANG="EN-US">bool ANG="EN-US">TutorialListener::frameStarted(const FrameEvent &evt)

ANG="EN-US">{

ANG="EN-US">... ... ...

ANG="EN-US">         //------------------------- 设置动画播放参数--------------------

         Entity* ent = m_pObjSceneMgr->getEntity("Body");

         if (NULL != ent) {

              mAnimationState = ent->getAnimationState("Springy"); // 得到动作的名称

              mAnimationState->setLoop(true);

              mAnimationState->setEnabled(true);       

         }

         mAnimationState->addTime(evt.timeSinceLastFrame);

... ... ...

}

截图如下

              

 

动画的播放教程可以参看Ogre中文网站的中级教程一

发表于 2009-12-19 10:29:41 | 显示全部楼层
[BR]能不能把图片显示出来啊
发表于 2009-12-19 10:29:41 | 显示全部楼层
[BR]能不能把图片显示出来啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-5 22:48

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表