Ogre程序加载mesh文件原理

转:https://blog.csdn.net/stilling2006/article/details/5967883
//创建模型实体
Entity* entObject = mSceneMgr->createEntity(“object”, “ogrehead.mesh”);

createEntity() (创建实体) 在当前场景中创建一个实体实例并返回它的对象指针,作为 SceneManager 类的一个成员函数,它有两个重载:

Entity * Ogre::SceneManager::createEntity (

const String & entityName, // 实体名称(同一场景中不能有相同的实体名称)

PrefabType ptype // 预制类型(不需要读取模型,直接在程序中创建简单几何体,

// 目前只有平面 PT_PLANE 一种预制类型)

) [virtual]

Entity * Ogre::SceneManager::createEntity (

const String & entityName, // 实体名称(同一场景中不能有相同的实体名称)

const String & meshName // 模型名称(需要从硬盘上读取的模型的文件名)

) [virtual]

这里用的是第二个重载,也就是从硬盘上读取模型,模型文件名 “ogrehead.mesh” ,这个文件在 OGRE\Samples\Media\models 目录下。查看一下这个目录,里面有一些 .mesh 文件,还有一些 .skeleton 文件 。

  • .mesh 文件包含了静态模型和材质的信息,.skeleton 文件对应一个同名的 .mesh 文件,保存这个模型的骨骼和动画信息(如果有)。使用 createEntity() 方法,不管是不是带骨骼带动画的 *.mesh ,都一样读取,但是要想播放模型的动画,还需要做一些别的工作,如果现在你直接读取 ninja.mesh 这个带骨骼动画的模型,它不会动。

到了这里,还有一个问题,就是 OGRE 是怎么找到的这个 .mesh 文件?它怎么知道这个 .mesh 文件是放在 OGRE\Samples\Media\models 目录下的?还有我们在示例中看到的模型是带纹理贴图的,那么纹理贴图都在哪里呢? OGRE 又是怎么找到这个模型需要的纹理贴图的呢?

在 E:\Desktop\Learning\OGRE\Samples\Common\bin 目录、还有这个目录的 Debug 和 Release 两个子目录下,存在着一系列的 *.cfg 文件,它们都是些配置文件, OGRE 程序在打开以后,第一件事情就是检查并读取这些配置文件,从中了解一些关键信息。其中的 resources.cfg 就是用来指定所有的游戏资源所在的目录路径, OGRE 要读取一些资源,就会从这些路径中搜索。

resources.cfg 文件的内容:

FileSystem=../../../Media

FileSystem=../../../Media/fonts // 字体

FileSystem=../../../Media/materials/programs // 材质程序 (CG、HLSH、GLSL 等)

FileSystem=../../../Media/materials/scripts // 材质定义脚本

FileSystem=../../../Media/materials/textures // 纹理贴图

FileSystem=../../../Media/models // 模型

FileSystem=../../../Media/overlays // 盖层(界面)定义脚本

FileSystem=../../../Media/particle // 粒子定义脚本

Zip=../../../Media/packs/cubemap.zip

Zip=../../../Media/packs/cubemapsJS.zip

Zip=../../../Media/packs/dragon.zip

Zip=../../../Media/packs/fresneldemo.zip

Zip=../../../Media/packs/OgreCore.zip

Zip=../../../Media/packs/ogretestmap.zip

Zip=../../../Media/packs/skybox.zip

你可能会留意到每一条语句前面有 FileSystem 和 Zip 的区别,查看一下 OGRE\Samples\Media\packs 里面的那些 *.zip 文件,用 WinRAR 把它们打开来看,比方说打开 dragon.zip ,可以看到里面有这样几个文件:

dragon.mesh
body.jpg
head4.jpg
legs.jpg

一个模型,带三张贴图,就是这么简单。 这个意味着,OGRE 在搜索所需资源的时候,不但能搜索系统目录 (FileSystem) ,还能在压缩文件 (Zip) 中搜索。

最后是模型的纹理贴图,这个在 .mesh 文件自身中定义,我们在使用 3dsmax 、 Maya 等输出 .mesh 模型的同时,纹理贴图的相对路径也会被同时包含输出。

// 创建模型实体
Entity* entObject = mSceneMgr->createEntity(“object”, “ogrehead.mesh”);

现在你可以试着让它读取不同的模型,就把这个示例当作一个模型浏览器来用吧 ,几个 *.zip 文件里的资源也试试,比方说,读取 “dragon.mesh” 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值