OGRE框架初探之实现对D3D的封装

本文介绍了作者在项目中研究OGRE框架的过程,特别是它如何对Direct3D(D3D)进行封装。OGRE通过Manager类管理各种资源和功能,包括Scene、Material、Mesh等,并通过RenderSystem抽象接口对D3D和OpenGL进行统一。D3D9RenderSystem实现了D3D的相关接口,使用D3D9Device、D3D9Driver等类封装D3D的Device和Caps。作者对这种封装结构进行了深入探讨,旨在理解OGRE的底层工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为项目的需要,这两天看了部分OGRE的源码,主要是框架部分,略有体会,写下来仅作为记录,语句或有杂乱,如不慎被各位牛人看到,调笑之余欢迎各种指点。

 

世上有两种图形引擎,一是直接与硬件打交道,如D3D和OPENGL;一是在前者的基础上,以更高效的图形开发为目的,通过封装更多底层细节,所形成的图形引擎,如unreal、source。

 

 

底层图形语言D3D和OPENGL,实现了对硬件细节层面的封装,提供了统一编程接口,让程序员从各种底层硬件接口中解脱出来,专注于相对高层的代码层面。

 

高层图形语言把这个思想更进一步,通过对D3D和OPENGL的更多细节封装,隐藏了与图形加速卡直接交互的接口,提供了场景管理等各种管理模块,以及运用多种设计模式,达到使游戏开发高效率,高重用性,低错误率等等好处。

 

 

OGRE作为同时支持D3D与OPENGL的开源引擎,其底层部分就需要对这两者进行封装。为了便于理解。可以暂时将OGRE分成两个层面:底层图形语言无关的功能层面和底层图形语言相关的实现层面。(鉴于已看的代码不多,姑且暂时这么分吧,可能某些部分不能单纯这么划分,就先不管了:)。

 

功能层面上,OGRE通过Manager,实现对log,controller,scene,Dynlib,archive,material,mesh,particle_system,skeleton,resource,shadow_texture,render_system,等功能的管理。这些模块都生成相应的Manager实例,放于root class中,在工程其他地方中可以通过调用root的getXX方法,或者ClassName::getSingleton()的方法,获得该类的单例。因为每个manager类都是多重继承自它的基类和一个singleton<classA>模板类,用这种方法保证了各manager类实例的唯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值