直接载入AXP格式的文件包,高效又方便,纠结了半天,在网友的帮助下得到启发

OGRE默认的2种档案格式一个是文件夹,一个是Zip压缩包.

不过OGRE提供了自定义档案载入的接口,就是说我们可以自己定义任何类型的档案,比如AXP

把AXP档案交给资源管理器管理,管理器定位到所有资源,

资源中的materi之类的脚本文件自动就会分析,

如果是OGRE支持的文件格式,比如dds之类,需要的时候自动载入

如果是OGRE不直接支持的文件格式,比如二进制文件或者xml文件

我们也可以从资源管理器获得文件名字用流自己来载入,

DataStreamPtr mStreamPtr =   ResourceGroupManager::getSingleton().openResource(   
  fileName, TLBB_RESOURCE_GROUP);

这样文件路径都省去了.由资源管理器定位的时候就已经保存好了文件路径

要想让资源管理器帮我们做好所有事情,

必须按照下面这个接口来定义自己的档案

class MyArchive : public Archive

{

// 在这省略了具体的实现

}

class MyArchiveFactory : public Archive

{

//在这省略了具体的实现ArchiveFactory的一些方法

Archive* createInstance(const String& name){

return new MyArchive(name, “MyArchiveType”);

}

};

void function()

{

MyArchiveFactory *factory = new MyArchiveFactory;

ArchiveManager::getSingleton().addArchiveFactory(factory);

}

关键点就是自己的实现

要现实的东西比较多,几乎要全部重写Archive和ArchiveFactory这2个类

不过幸运的是我们可以照着OGRE源码里面Zip.cpp这个源文件的实现来写

大部分和Zip的实现相同......有心人研究研究就明白了

框架:

[cpp]  view plain copy
  1. class AxpPacker;
  2. class TLBBArchive : public Archive
  3. {
  4. public:
  5. TLBBArchive(const String& name, const String& archType );
  6. ~TLBBArchive();
  7. bool isCaseSensitive(void) const { return false; };
  8. void load();
  9. void unload();
  10. DataStreamPtr open(const String& filename) const;
  11. StringVectorPtr list(bool recursive = true, bool dirs = false );
  12. FileInfoListPtr listFileInfo(bool recursive = true,bool dirs = false);
  13. StringVectorPtr find(const String& pattern, bool recursive = true,bool dirs = false);
  14. FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true,bool dirs = false);
  15. bool exists(const String& filename);
  16. time_t getModifiedTime(const String& filename);
  17. private:
  18. AxpPacker *mPacker;
  19. };
  20. class TLBBDataStream : public DataStream
  21. {
  22. public:
  23. TLBBDataStream(const String& name, AxpPacker* packer);
  24. ~TLBBDataStream();
  25. size_t read(void* buf, size_t count);
  26. void skip(long count);
  27. void seek( size_t pos );
  28. size_t tell(void) const;
  29. bool eof(void) const;
  30. void close(void);
  31. private:
  32. String mFileName;
  33. AxpPacker * mPacker;
  34. DWORD mStart;
  35. DWORD mLen;
  36. DWORD mCurPos;
  37. };
  38. class TLBBArchiveFactory : public ArchiveFactory
  39. {
  40. const String& getType(void) const;
  41. Archive* createInstance(const String& name);
  42. void destroyInstance(Archive* arch) {delete arch;}
  43. };

[Bootstrap]
Zip=../../Data/OgreCore.zip
Zip=../../Data/MaterialTemplates.zip

[AXP]
AxpPack=../../Data/Scene.axp
AxpPack=../../Data/Material.axp
AxpPack=../../Data/Model.axp
AxpPack=../../Data/Brushes.axp

最后的效果:

07:57:52: ArchiveFactory for archive type AxpPack registered.
07:57:52: Creating resource group AXP
07:57:52: Added resource location '../../Data/Scene.axp' of type 'AxpPack' to resource group 'AXP'
07:57:52: Added resource location '../../Data/Material.axp' of type 'AxpPack' to resource group 'AXP'
07:57:52: Added resource location '../../Data/Model.axp' of type 'AxpPack' to resource group 'AXP'
07:57:52: Added resource location '../../Data/Brushes.axp' of type 'AxpPack' to resource group 'AXP'
07:57:52: Creating resource group Bootstrap
07:57:52: Added resource location '../../Data/OgreCore.zip' of type 'Zip' to resource group 'Bootstrap'
07:57:52: Added resource location '../../Data/MaterialTemplates.zip' of type 'Zip' to resource group 'Bootstrap'

07:57:53: Parsing scripts for resource group AXP
07:57:53: Parsing script FairyTerrain.program
07:57:53: Parsing script std_quad.program
07:57:53: Parsing script FairyTerrain.material
07:57:53: Parsing script all.material
07:57:54: Error at line 59378 of : parent material: NPCnMonsterAlphaTemplate not found for new material:boss玄镰刀怪 
07:57:54: Error at line 59383 of : parent material: NPCnMonsterNoAlphaTemplate not found for new material:boss缥缈峰普通侠士双刀 
07:57:54: Error at line 59388 of : parent material: NPCnMonsterFaceNoAlphaTemplate not found for new material:boss缥缈峰普通侠士头

我把含有父材质的MaterialTemplates.zip放前面,却后解析,很囧,导致NPCnMonsterAlphaTemplate not found

有了接口框架,自己照着写就行,而关于AXP资源的破解,网上好像有大侠说的更明白,有兴趣的自己去找找,

AXP档案的直接载入搞定相关推荐

  1. 36招搞定电脑一切难题

    1.解决插电即开机问题 现象:有些朋友有关机后断开电源板电源的习惯,可是却常常被一个问题困扰,就是电源板一通电,计算机就自动开机了,Power键形同虚设.解决:有些主板在BIOS设置的"Po ...

  2. 吐血推荐 36招搞定电脑一切难题

    1.解决插电即开机问题 现象:有些朋友有关机后断开电源板电源的习惯,可是却常常被一个问题困扰,就是电源 板一通电,计算机就自动开机了,Power键形同虚设.解决:有些主在BIOS设置的"Po ...

  3. 36招搞定电脑一切难题!!!

    1.解决插电即开机问题 现象:有些朋友有关机后断开电源板电源的习惯,可是却常常被一个问题困扰,就是电源板一通电,计算机就自动开机了,Power键形同虚设.解决:有些主板在BIOS设置的"Po ...

  4. 1exe1.net - 1个exe文件搞定1切

    1exe1.net - 1个exe文件搞定1切 本站所收录软件均只有一个 .exe,不含其它任何文件,绿色得不得了,欢迎提供货源. 推荐 上海电脑维修网 ,我的5u6网盘 文件名 大小 简介 版本 更 ...

  5. 从数百个Excel中查找数据,一分钟用Python搞定

    作者 | 陈熹 来源 | 早起Python 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大. 需求说明 首先我们来看下今天的需求,有一份档案记录 ...

  6. Redis:从应用到底层,一文帮你搞定

    1.基本类型及底层实现 1.1.String 用途: 适用于简单key-value存储.setnx key value实现分布式锁.计数器(原子性).分布式全局唯一ID. 底层:C语言中String用 ...

  7. 《企业自主搞定ERP》试读:第一章-Odoo概述

    文/开源智造联合创始人老杨 本文来自<企业自主搞定ERP>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. Odoo是什么 Odoo,以前叫OpenERP,是比利时Odoo S.A ...

  8. 几周内搞定Java的10个方法

     几周内搞定Java的10个方法 不要将Java与JavaScript弄混了,Java的目标是"一次编译,到处调试"(呃,不对,是"到处运行").简单来说, ...

  9. 扔掉 Postman,一个工具全部搞定,真香!

    今日推荐 论异步编程的正确姿势:十个接口的活现在只需要一个接口就能搞定!让SpringBoot不再需要Controller.Service.Mapper,这款开源工具绝了!「吐血」我把 10 年的全部 ...

  10. openpyxl写入一行数据_老板让我从几百个Excel中查找数据,我用Python一分钟搞定!...

    以下文章来源: 早起Python 作者:陈熹 大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 一. ...

最新文章

  1. 楼盘历史价格管理导入功能优化
  2. Win7下JDK环境变量设置批处理(转)
  3. 后台CS代码中创建四种常用的SL动画效果
  4. html实现拖拽排序,简单的jquery拖拽排序效果实现代码
  5. JSP中 input type 用法
  6. IoT -- (九) IoT通讯技术选型与模型设计
  7. 【jQuery笔记Part1】07-jQuery操作css-添加删除切换类、开关灯泡案例
  8. 吸顶那个叫什么_吸顶式无线ap优缺点(无线吸顶ap是什么)
  9. git 提交代码的好习惯
  10. apache phoenix的JAVA JDBC操作
  11. 涉密计算机检查专业软件,RG涉密信息自检查工具
  12. Java---遍历Map集合的三种方式
  13. android上跑脚本,光遇自动跑图脚本
  14. dSYM文件的汇编分析
  15. ros_arduino_bridge功能包集的使用错误及解决方法总结
  16. 如何比较两个文本的相似度
  17. 3A技术的介绍以及CISCO路由器上相关配置
  18. 设置自动关门时长_自动上锁,鹿客智能指纹锁classic2s,双十一值得买
  19. 联想开机启动项按哪个_联想电脑怎么在BIOS中设置从U盘或光盘启动
  20. 模拟仪器仪表ActiveX(OCX)控件 - 实时曲线(RTChart)介绍及下载地址

热门文章

  1. 谈下自己的性格,谈下vbs的一些代码
  2. 服务于所有手机、所有网络的安卓Facebook Lite是怎样打造出来的
  3. 几点减几点怎么列算式_幼儿园大班数学教案:《学习8的加减》
  4. Java线程总结(二):线程的同步方式synchronized
  5. Java多线程(六):J.U.C 之 AQS
  6. Whole-cell segmentation of tissue images with human-level performance using large-scale data annotat
  7. CentOS7添加开机启动服务/脚本(延用CentOS6方法)
  8. 初学者指南:GRUB-系统引导管理器
  9. 盐城怎么样才能成为一名健身教练?
  10. 视频流媒体服务器视频直播流播放界面持续抖动不稳定如何处理?