CQuartzFileUnZip提取资源类库使用详解

来源:互联网 发布:使用eplan软件的感悟 编辑:程序博客网 时间:2024/04/29 10:30

前段时间写了CQuartzFileUnZip 0.3这个类,不过发现好多人不会用,今天写一个例题来解释一下这个工具的使用方法:

 

1.把资源打包

 

首先,运行QuartzFilePackEdit 0.4.exe (刚上传的版本)

 

打开文件

 

 

运行界面打开以后,就可以通过"添加资源",向文件列表中添加资源。

 

界面 

这个是我今天刚刚写的,新增加了打开对话框中,一次可以选取多个文件的功能。这样整个文件夹的问加载就变得简单了。目前还不提供再压缩文件中支持文件夹的功能。

 

 

要注意一点,就是压缩文件中最好不要出现中文,以免你在QFT包中无法正确的读取到资源。

 

接下来文件打包保存成*.Qft文件,这样,这个文件包内会自动产生文件列表,如果你怕忘了里面的文件了,那就把文件列表导出来,点选“导出文件表”再打包,那么就会有一个index.txt文件在*.Qft同级目录中,其中保存了文件列表。下一个版本我准备再增加一个打开*.Qft文件的功能,可以向已经打好包的资源中追加新的资源;目前还在构思数据结构,大家耐心等待,呵呵

 

 

2.在代码中解析资源

刚才已经把资源都压缩到*.Qft文件中去了,那么接下来的工作就是把里面的资源读到我们的游戏中去。CQuartzFileUnZip这个类最大的好处就是不用把文件从压缩包中解压出来,而是直接读取资源文件本身,这样要对里面不同类型的数据文件的格式要进行数据分类和提取,这个工作目前封装在类中,都帮你做好了。只需要在你的程序中直接读取资源就好了

我们用一个D3D例题 来看看怎么使用CQuartzFileUnZip(要在附加依赖项中添加"QuartzFTeX.lib"):

 

 

 

以上代码就是D3D标准的3D例题,其中修改代码的地方有:

 

CQuartzFileUnZip  g_MDFile;            //CQuartzFileUnZip类型数据
std::list<XFILEINFO*> g_xinfo;       //保存.x文件信息的,里面包含了纹理,还有用到的材质。

 

在开始的时候,需要对g_MDFile初始化,因为用到的都是d3d的资源,先传入D3d设备指针。

g_MDFile.Init(g_pd3dDevice);

 

 

接下来读取资源

//********通过CMD来或其Qft文件内部的图片********
 g_MDFile.OpenSourceFromFile("test.QFT","");

 

  //读取*.QFT内部的纹理
 if(!g_MDFile.GetTextureByName("1231.png",g_pTexture))   //参数解释:(文件名,  纹理指针)
     return false;

  //读取*.QFT内部的静态.x文件

 if(!g_MDFile.GetMeshByName("tiger.X",g_pMesh,g_xinfo))  //参数解释:(文件名,   mesh指针,  存放.x文件的信息容器)
  return false;


读取动态的.x文件已经写好了,因为还要涉及到骨骼动画这块比较麻烦,等我封装好一个类一块拿出来;

 

 

剩下的就是渲染了,对于.x文件的渲染只需要下面的办法就可以了:

 

std::list<XFILEINFO*>::iterator it = g_xinfo.begin(); 


  for( DWORD i=0; i<g_xinfo.size(); i++,++it )
  {
   // Set the material and texture for this subset
   g_pd3dDevice->SetMaterial( (*it)->pd3dxMaterials );
   g_pd3dDevice->SetTexture( 0, (*it)->pTexture);

   // Draw the mesh subset
   g_pMesh->DrawSubset( i );
  }

------------------------------------------------------------------------------

如果要渲染纹理,就增加一个面,把纹理贴上去就行了~~这个类尽量的提供的数据都是原始数据,目的是为了让你原来的项目代码只有尽少的改动。

 

 3.程序的运行

要运行程序,必须注意,需要在你的项目文件夹中包含MD_File.dll,QuartzFTeX.dll两个动态链接库,这两个库分别是读取文件内指针的方法和对数据进行解压的方法。刚才代码我已经测试通过了,如果还有什么问题的话,可以留言给我~~

 

 

0.5.11版本下载(如果地址失效请留下mail)

http://u.sohu.com/download/11/13263401304527265414057

QuartzFileUnZip_lib v0.3 类库下载

http://download.csdn.net/source/2300197

 

原创粉丝点击