资源管理

  可管理的资源有:

  材质资源:在.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 官方文档学习笔记

    VUE2.0官方文档 基础部分: 1.VUE简介 Vue是一个基于MVVM的框架,其中M代表数据处理层,V代表视图层即我们在Vue组件中的html部分,VM即M和V的结合层,处理M层相应的逻辑数据,在 ...

  2. html5 03

    HTML03 一. 表单标签 <form></form> 常用属性 Action 跳转到什么页面 Method  以什么模式提交 Get Url有长度限制 IE6.0 url ...

  3. Ubuntu 11.04 安装 cuda5.0

    由于实验需要,于2016年10月15日再Ubuntu11.04安装cuda5.0,但是从网上查找Ubuntu11.04 只有对应的支持的cuda4 版本,cuda 5.0前面版本不支持IDE nisg ...

  4. Linux 安装Memcache扩展支持

    查看相关软件包 yum search memcached 安装memcache yum -y install memcachedMemcache关联php yum -y install php-pec ...

  5. Git项目管理常用命令

    安装Git Bash后,地址:https://git-scm.com/downloads 根据自己的操作系统选择对应是安装方式 可参见码云给出的文档:http://git.mydoc.io/?t=18 ...

  6. ajax请求执行完成后再执行其他操作(jQuery.page.js插件使用为例)

    就我们做知,ajax强大之处在于它的异步请求,但是有时候我们需要ajax执行彻底完成之后再执行其他函数或操作 这个时候往往我们用到ajax的回调函数,但是假如你不想或者不能把接下来的操作写在回调函数中 ...

  7. CodeForces 66C Petya and File System (实现)

    模拟题,map搞一搞.要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性. #include&l ...

  8. [视觉] 基于YoloV3的实时摄像头记牌器

    基于YoloV3的实时摄像头记牌器 github:https://github.com/aoru45/cards_recognition_recorder_pytorch 最终效果 数据准备 数据获取 ...

  9. [学习笔记] C++ 历年试题解析(一)--判断题

    少说话.. 程序题链接:https://www.cnblogs.com/aoru45/p/9898691.html 14级试题---选择题 1. 引用在声明时必须对其初始化,以绑定某个已经存在的变量( ...

  10. 如何使用TensorFlow Hub和代码示例

    任何深度学习框架,为了获得成功,必须提供一系列最先进的模型,以及在流行和广泛接受的数据集上训练的权重,即与训练模型. TensorFlow现在已经提出了一个更好的框架,称为TensorFlow Hub ...