1. 前言
话说有一段时间没有更新了,这段时间好好玩了一下,也抽空写了一点程序,把八叉树场景管理写了,也优化了一点资源加载的一些内容。之前对DirectX的好些地方还是没有弄清楚,现在对这些地方至少有了更多的了解。发一下今天完成的八叉树场景管理,里面的模型用的是DirectX示例的老虎,这儿看不太清楚--;
今天主要说说我的引擎中的模型,特效,贴图的实现,至少把大概的意思说清楚。如果还有不懂的地方可以跟我联系。
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: };
编缉推荐阅读以下文章
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!