资源管理

  可管理的资源有:

  材质资源:在.material文件中包含的材质脚本定义(技术、通路、纹理单元等数据的定义)。
  模型资源:经过优化的二进制网格模型文件,扩展名为.mesh。包含几何信息和一些动画数据。
  骨骼资源:经过优化的二进制骨骼文件,扩展名为.skeleton。包含骨骼动的数据以及相应帧动画的信息。
  字体资源:字体的配置信息,扩展名为.fontdef的文件,其中包括TrueType字体的引用以及其他字体配置数据。
  GPU程序资源:在.program中对GPU程序的声明信息,与材质脚本.material文件有类似的结构,但Ogre保证所有.program文件都会在处理材质脚本之前被载入处理。
  纹理资源:在纹理中使用的2D图片数据。每种类型都有其自身的扩展名,比如JPG文件的.jpg或者.jpeg,Targa文件的.tga,诸如此类。

资源组
  Ogre可以从两个不同的层级来对资源进行管理:对某种类型的资源管理和对一组资源类型的管理。
资源组与世界地图
  在默认的情况下,Ogre通过场景管理器把整个地图载入“General”资源组中。因此也可以使用与资源管理一样的方法去管理场景/世界地图资源数据。
资源载入

  如果你所使用的资源在之前没有被载入,那么Ogre会自动帮助你在内部执行相应的载入动作。
后台处理资源载入

  不得不提出的是,在默认的情况下Ogre并不是线程安全的。

后台载入的实现多线程

  在使用多线程管理后台载入的时候,你必须定义一个这样的宏,把它写在OgreConfig.h文件中。这样就可以实现后台载入的功能。

  #define OGRE_THREAD_SUPORT 1//

资源卸载

  资源数据载入后一直驻留在内存中直到到应用程序强制卸载(通过资源组管理器或者直接释放资源)。Ogre绝不会自动从内存中释放资源,并且你不能够强制卸载还被资源组引用的资源。

资源生存周期 

  四种状态之间的变化:未定义状态-->已声明状态--->未载入状态--->已载入状态。使用完毕时全部卸载,进入未定义状态。

 资源管理的配置文件在resources_d.cfg中,如下:

 # Resources required by the sample browser and most samples.
[Essential]
Zip=../../media/packs/SdkTrays.zip
Zip=../../media/packs/profiler.zip
FileSystem=../../media/thumbnails # Common sample resources needed by many of the samples.
# Rarely used resources should be separately loaded by the
# samples which require them.
[Popular]
FileSystem=../../media/fonts
FileSystem=../../media/materials/programs
FileSystem=../../media/materials/scripts
FileSystem=../../media/materials/textures
FileSystem=../../media/materials/textures/nvidia
FileSystem=../../media/models
FileSystem=../../media/particle
FileSystem=../../media/DeferredShadingMedia
FileSystem=../../media/PCZAppMedia
FileSystem=../../media/RTShaderLib
FileSystem=../../media/RTShaderLib/materials
FileSystem=../../media/materials/scripts/SSAO
FileSystem=../../media/materials/textures/SSAO
Zip=../../media/packs/cubemap.zip
Zip=../../media/packs/cubemapsJS.zip
Zip=../../media/packs/dragon.zip
Zip=../../media/packs/fresneldemo.zip
Zip=../../media/packs/ogretestmap.zip
Zip=../../media/packs/ogredance.zip
Zip=../../media/packs/Sinbad.zip
Zip=../../media/packs/skybox.zip [General]
FileSystem=../../media # Materials for visual tests
[Tests]
FileSystem=../../media/../../Tests/Media

  文件中有四个资源组,"Essential","Popular","General","Tests",其中的FileSystem代表文件是目录结构的,ZIP代表文件是zip压缩文件。

资源初始化

资源初始化需要一定的顺序支持。在正式添加资源前,你需要首先初始化相应的资源组。

 // 初始化所有先前定义的资源组
ResourceGroupManager::getSingleton().initialiseAllResourceGroup();//
// 或者每次交替初始化一个资源组
ResourceGroupManager::getSingleton().intialiseResourceGroup(“Essential”);
ResourceGroupManager::getSingleton().intialiseResourceGroup(“Popular”);
ResourceGroupManager::getSingleton().intialiseResourceGroup(“General”);
ResourceGroupManager::getSingleton().intialiseResourceGroup(“Tests”);

清理或者销毁资源组

  清理资源组只是卸载和删除资源组里面的资源。

 ResourceGroupManager::getSingleton().clearResourceGroup(“General”);//

  销毁资源组不但清理了里面的资源,还销毁了资源本身。

 ResourceGroupManager::getSingleton().destroyResourceGroup(“General”);

档案管理器(ArchiveManager

  要实现档案管理的功能,必须定义一个继承自Archive的接口,然后实现相应的工厂方法ArchiveFactory,注册到文档管理器中

 class MyArchive : public Archive
{
// 实现代码
} class MyArchiveFactory : public ArchiveFactory
{
//其他ArchiveFactory的一些方法
  Archive* createInstance(const String& name)
10   {
   return new MyArchive(name, “MyArchiveType”);
12   }
};
void function()
{
  MyArchiveFactory *factory = new MyArchiveFactory;
  ArchiveManager::getSingleton().addArchiveFactory(factory);
}

  慢慢进步.......

ogre3D学习基础8 --- 资源管理器的更多相关文章

  1. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  2. ogre3D学习基础11 -- 交换两个场景管理器

    这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...

  3. ogre3D学习基础6---场景管理器的使用

    场景管理器的使用 最常使用的坐标系统空间(同时也是Ogre程序所能提供的)即是世界空间(World).父节点空间(Parent)以及本地空间(Local). 1.世界空间 就是物体所存在的地方,当我们 ...

  4. ogre3D学习基础5 -- 阴影与动画

    五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...

  5. ogre3D学习基础9 -- 光源程序实例

    这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...

  6. ogre3D学习基础19 --- 材质的继承,纹理的滚动与旋转

    以上一节为基础,废话不多说. 首先新增一个节点,用于比较显示 //新增一个节点 ent = mSceneMgr->createEntity("Quad"); ent-> ...

  7. ogre3D学习基础18 -- 材质的使用与脚本的简单书写

    这一节以基础16为基础,练习材质的使用. 第一,看看框架 //material #include "ExampleApplication.h" class TutorialAppl ...

  8. ogre3D学习基础17 --- 如何手动创建ogre程序

    建立自己的Ogre程序 一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方. 首先,我们新建一个win32空项目 然后配置环境 最后新建define.c ...

  9. ogre3D学习基础16 -- 手动创建实体(ManualObject)

    这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...

随机推荐

  1. vue2.0:(八-2)、外卖App弹窗部分sticky footer

    什么是sticky-footer ? 如果页面内容不够长的时候,页脚块粘贴在视窗底部,如果内容足够长时,页脚块会被内容向下推送.那具体要怎么做呢?下面以外卖App为例: 第一种方法:这个自己用过,是好 ...

  2. Linux下常用的数据恢复工具

    一.数据删除 命令:rm -rf,将任何数据直接从硬盘删除,且没有任何提示 建议做法: 把命令参数放到后面:rm -rfi 将删除的东西通过mv命令移动到系统下的/temp目录下,然后写个脚 本定期执 ...

  3. <Android 应用 之路> 天气预报(二)

    界面组成 载入界面 显示界面 Activity两个,一个用来显示载入界面,一个用来显示天气信息 主要代码如下: public class MyActivity extends Activity { p ...

  4. HttpRunner环境搭建

    官方文档地址:http://cn.httprunner.org/官方源码地址:https://github.com/HttpRunner/HttpRunner HttpRunner 是一款面向 HTT ...

  5. HTML 中的特殊字符

    空格符         <小于号    < >大于号    > &和好      & ¥人民币  ¥ ©  版权   © ®  注册商标 ® ℃ 摄氏度  ° ...

  6. MongoDB远程定时备份与还原

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10885165.html,多谢~=.= 备份命令mongodump脚本语法及各项参数含义 mong ...

  7. [windows]清除访问共享的用户和密码信息

    方法一: 操作步骤:进入cmd命令界面-->输入:net use(查看列表)-->输入:net use * /delete(清空列表)-->输入:y 回车确认即可. [查看已记录的登 ...

  8. LeetCode House Robber 家庭劫犯(dp)

    题意:有一个整数序列,从中挑出一些数字,使得总和是最大,前提是,相邻的两个数字中只能挑其一.比如1 2 3 就只能挑2或者1和3. 思路:很直观的题,dp思想.降低规模,从小规模开始考虑.如果只有两个 ...

  9. HDU 2149 Public Sale 拍卖(巴什博弈)

    思路:只要能给对方留下n+1,我就能胜,否则败. #include <iostream> #include <cstdio> using namespace std; int ...

  10. LibreOJ #2037. 「SHOI2015」脑洞治疗仪

    线段树区间合并问题 恶心... 屠龙宝刀点击就送 #include <cstdio> #define N 200005 struct Segment { int l,r,mid,sum,l ...