快速业务通道

设计自己的3D图像引擎(4):WuguiEngine之模型、特效、贴图

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

1. 前言

话说有一段时间没有更新了,这段时间好好玩了一下,也抽空写了一点程序,把八叉树场景管理写了,也优化了一点资源加载的一些内容。之前对DirectX的好些地方还是没有弄清楚,现在对这些地方至少有了更多的了解。发一下今天完成的八叉树场景管理,里面的模型用的是DirectX示例的老虎,这儿看不太清楚--;

设计自己的3D图像引擎(4):WuguiEngine之模型、特效、贴图 

今天主要说说我的引擎中的模型,特效,贴图的实现,至少把大概的意思说清楚。如果还有不懂的地方可以跟我联系。

2. 模型、特效、贴图的资源复用

大家也可以看到了,上面那张图上的老虎不止一个,当同一个模型的数目多到一定程度(比如说10000个),就要考虑一定的优化了,如果每次都傻傻的从文件中把模型读取出来,保存为一个ID3DXMesh,那不仅加载的时间慢的令人无法忍受,而且耗费的内存同样巨大。在WuguiEngine中,我使用了一个比较简单的方法来解决这个问题。

设计模式的中心思想就是对修改关闭,对扩展开放,中心思想就是“变化”,但是很不好意思的说,我对D3D一知半解,在很多时候甚至不清楚“变化”将出现在什么地方,所以我使用的方法,很简单,现在用起来很清晰,但是如果对之后的扩展支持不好或者有更好的架构方法还望大家指点。本系列文章的宗旨就是抛砖引玉。

我使用了一个简单的Map来完成这些内容下面给出资源管理器(ResourceManager)的定义

1: class GraphicsDevice;
2:
3: //资源的类型
4: enum ResourceType
5: {
6:   RTTexture = 0,
7:   RTMesh = 1,
8:   RTEffect = 2,
9: };
10:
11: //一个资源的描述
12: //由ResourceType,Void*类型的指针pResource,引用次数useCount组成
13: typedef struct StructRes
14: {
15: public:
16:   StructRes(void* pRes, ResourceType type)
17:   {
18:     pResource = pRes;
19:     useCount = 1;
20:     resourceType = type;
21:   }
22:   ResourceType resourceType;
23:   void* pResource;
24:   int useCount;
25: } StructRes;
26:
27: //资源管理器
28: class ResourceManager
29: {
30: public:
31:   static ResourceManager* GetInstance();
32:
33:   //根据文件名获取资源文件
34:   void* GetD3DResource(string filename,
35:     GraphicsDevice* pDevice,
36:     ResourceType type);
37:
38:   //根据文件名卸载资源文件
39:   void DisposeD3DResource(string filename);
40: protected:
41:   ResourceManager();
42:
43:   map<string, StructRes*> resourceTable;
44:   static ResourceManager* pInstance;
45: };

下面对代码进行一点解释:

ResourceType故名思意就是资源的类型,在目前阶段,由贴图,特效,模型组成。

StructRes是每一个资源的结构体,里面的void*指针指向所包含数据的内存。所包含数据的中心思想就是“保存公有的内容”。例如对于一个模型来说:顶点数据是公有的内容,但是贴图就不一样了,一个立方体可以贴成一个骰子,也可以贴成一个箱子,还有模型的位置也不属于公有的内容。之后在讲到模型的时候我将会更详细的解释这个地方

ResourceManager就是我们程序中资源管理器了。在这儿设计成为单件模式,如果看了我之前几篇文章的朋友们可能会发现我特别喜欢用单件模式,可能是我不喜欢把一个指针老当成参数传来传去吧,呵呵。

在ResourceManager中最重要的第一是数据结构,在目前我使用的STL中的map。

1: map<string, StructRes*> resourceTable;

第一个参数string在目前是资源的文件名,目前引擎还不具备文件系统

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号