您的位置:首页 > 其它

Gamebryo 游戏引擎分析(一)整体设计

2015-08-20 15:13 239 查看
(因为这个引擎是商业引擎,所以,我不会粘贴“源代码”像这样:class OoXx{ public ...};但是我会这样:


  So, technically, technically, I don't breaking any laws here. But IF you want fuck me, go ahead, I don't give a shit. )

(另:引用请注明出处 blog.csdn.net/xjyhust,以及声明:全部资料来自互联网,如果对文章内容有意见,请e-mail我:
xjyhust@gmail.com;否则管我鸟事,I just come to buy some sauce. )

gamebryo有很多的工程,大概是这样组织的:

核心的库:CoreLib,引擎的核心运行时,包括了这样几个项目:


 

看名字就知道这些模块的功能。其中NiDXRenderer其实就是NiMain中渲染类的实现。看里面的宏定义就知道,gamebryo其实是设计成支持ps3的(至少是这样),但是我没有找到ps3的渲染器,也许是因为我用的这个版本是win32的sdk.

应用程序和辅助功能库:

 


这个工程就是对核心的一些辅助,包括:制作游戏编辑器的时候需要的一些基础组件、内建的可视化性能监视工具等等,好像还支持将log输出到网页上面,非常直观。

还有一些工程,我这里就打不开了,因为我没有弄到完整的代码,只有核心库的代码是全的。最为关键的Shader系统的代码暂时没有找到(也许只是工程没有装,代码也许是有的)。编辑器的代码应该也是没有的。。。可惜了。。。



 

总体来看gamebryo的框架设计,也是一层一层的裹起来的(大型程序都应该是这样的),因为是跨平台的引擎设计,感觉里面简单的使用宏定义的地方比较多,当然这样比较有效率,但是后面维护修改起来可能就麻烦一些。跨平台比较方便的就是大范围的替换,比如渲染器,xbox、ps3、wii上的渲染器结构差别都比较大,当然用继承的方式实现功能的差异是最好的选择。基础的部分,因为差异不是很多,用宏定义就是比较好的选择,而且效率肯定高。

但是有一点,ps3和xbox上面的内存那么小,不知道这个跨平台引擎怎么设计内存管理系统和资源管理系统的,这个和pc上面的差别比较大,用继承来实现可能会简单一些,比如:memsysPS3, memsysXB。。。我完全没有非pc平台的开发经验,但是感觉这些平台上面的内存管理策略就是和pc有很大的不同。id tech 5的主要技术亮点也是这个地方:他们的引擎可以同时跑三个平台,而美工不用做任何修改(zero-delta), 这点太了不起了。Unreal 好像都不能做到这点,有些关卡还需要修改才行(比如贴图大小啦,脚本大小了。。。)。

刚刚弄到的源代码,准备好好看看,毕竟我手头的商业代码里面,这个算是最正规的。(有谁还知道除了电驴和google搜种子以外,还有哪些方法可以找到这些资源的。。。;) )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: