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

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: };

时间: 2024-09-09 08:25:00

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

设计自己的3D图像引擎(1): WuguiEngine之开篇的话

前言: 研究3D游戏相关的知识有了不少的时间了.最近一段时间开始写自己的3D图像引擎-WuguiEngine. 代码也参考了不少的资料. 从引擎的功能上来说,不求能够让大众接受, 不求能够成为一个众多人维护的开源项目(不过源代码是开放的,只是没有太多精力来管理一个项目). 只是我一个在学习过程中的一个简单的项目.同时我在编写的过程中也希望能够多和大家交流, 把我的心得与大家分享, 也希望大家能够为我的学习或者项目提出一些意见. 本引擎虽然不算一个很易用的引擎, 不过也会实现目前流行的一些技术.

设计自己的3D图像引擎(3):WuguiEngine之基础循环的实现

1. 实现一个可重用的Windows Class(WEWindow) 下面的内容可能需要你知道一点简单的Windows程序编写的知识, 如果发现看不太懂, 也不用找很多的资料, 只要看看DirectX SDK中附带的Direct3D Turtorial就行了. 窗体的建立主要是有如下的难点: 1) 消息循环中的On Idle的处理函数不太好放. 2) WinMain函数入口处的HInstance需要保存 3) 窗体建立之后的HWND也是需要保存的 为了方便起见,我使用了单件模式作为设计,如果大家

设计自己的3D图像引擎(2): WuguiEngine之项目结构组织

1. 项目文件夹组织: 本引擎中没有把各个源文件放在不同的文件夹之下,只是使用了VS2008的Filter功能,虚拟的分出了一些文件夹,在项目浏览器中可以比较方便的看到 上面的图片是基本的一个组织情况: Core里面是一些核心的类, 比如说计时器等等 Document里面就是文档了 FX是Shader的代码 Graphics里面是渲染需要的类,里面又有一些文件夹: Effect是Shader的一些类 Camera是摄像机的一些类 Scene是场景管理相关的 Include里面是将各个Filter

九城新购德国3D游戏引擎用于开发未命名新游

德国3D游戏引擎开发公司Trinigy2月2日发布声明,中国主流网络游戏公司第九城市获得授权将使用Trinigy公司的多平台游戏引擎,用以制作一款尚未命名的网络游戏. 九城购买3D游戏引擎 Trinigy公司表示此合同的签署是其公司目标稳固立足于中国游戏市场所做出的重要一步举措.去年这家公司与包括中国在内的7家亚洲游戏开发商进行了合作,这些公司所开发游戏全部采用来自Trinigy公司的Vision 3D游戏引擎. "作为中国主要的网络游戏开发运营商,玩家在我们所提供的游戏中可以体验到无法超越的游

Horde3D —— C++ 轻量级 3D 渲染引擎

Horde3D 是一个用 C++ 写成的 3D 渲染引擎,致力于成为一款轻量型.概念清晰的软件. Horde3D 需要一个完全兼容 OpenGL2.0 的显卡.在 DirectX 上,意味着至少支持 Shader Model2.0 或更高的卡. 特性: 强大的图形引擎,旨在满足下一代游戏的要求 现代的基于着色器的架构,最低要求兼容 SM 2.0 的硬件 使用 OpenGL 作为渲染 API,跨平台兼容 整体设计优雅而轻巧,非常少的依赖,尽可能地避繁就简 整洁的面向对象 C++ 代码,为性能而生

常见3D物理引擎概述

今天帮朋友找3D物理引擎的资料,以前也看过那么多了,一直没有总结过,今天顺便整理一下. 1.  Havok: 老牌的君王,支持功能如下: http://www.havok.com ·         Collision Detection - including Continuous Physics ·         MOPP Technology - for compact representation of large collision meshes ·         Dynamics

3D设计 Adobe Acrobat 3D 8.1.0 英文版 下载_常用工具

在智能文档中发布.共享.审阅和标注 3D 设计Adobe? Acrobat? 3D 软件使扩展团队能够使用 Adobe PDF 文档,更加安全可靠地交流 3D 设计创意,从而丰富了协作内容. 在 Adobe PDF 文档中插入并发布用主流的 CAD 应用程序创建的 3D 设计,用免费的 Adobe Reader? 7.0* 软件即可轻松地与供应商.合作伙伴及客户共享这些文档.   Adobe Acrobat 3D software empowers CAD, CAM, and CAE users

Illustrator设计矢量风格3D图标绘制教程

给各位Illustrator软件的使用者们来详细的解析分享一下设计矢量风格3D图标的绘制教程. 教程分享:   1.3D文本,选用Illustrator字体工具输入"3D Logo".然后在效果菜单 选择 弯曲 选择 弧度(Effect >Warp > Arc)做如下设置:   2.三维挤压与导角 然后在效果菜单 选择 三维,再选择 挤压与导角( Effect > 3D > Extrude & Bevel )做如图设置.你可以用拖拽立方体的方法来设置X,

英特尔旗下Havok收购3D游戏引擎Trinigy

新浪科技讯 北京时间8月9日上午消息,英特尔旗下的互动软件解决方案提供商Havok周一宣布,已经收购了长期合作伙伴. 3D游戏引擎提供商Trinigy,但双方均未透露财务条款.Trinigy的视觉游戏引擎被很多游戏和模拟公司采用,而且获得了所有大型平台的支持,包括PC.索尼PlayStation.微软Xbox 360.任天堂Wii以及各种移动设备.该交易有望于8月中旬完成.(书聿)