手把手教你架构3D引擎高级篇系列二

系列一给读者介绍了我们查阅的相关资料,下面我们需要选择引擎的渲染库了,在这里先谈谈我对引擎的学习:
手把手教你架构3D引擎高级篇系列二_第1张图片
上图是我做项目用过的或者说自学所用到的引擎,我刚开始接触引擎是在读研究生的时候,是实验室自研的引擎,是为项目开发定制的,功能现在来说是比较陋的,后来我先接触的是Ogre引擎,利用它也做过一些小Demo,进入公司后,使用的是公司自研引擎开发的项目,再后来接触鬼火引擎,这款引擎代码编写简单,新手学起来比较容易。Cocos2d-x大家都知道它是一款开源的2D引擎,我还为Cocos2d-x的3D版本写过一本书《Cocos2dx 3.x 图形学渲染技术讲解》,以上几款都是开源的引擎,从事项目开发用的都是商业引擎从Torque引擎开发AR产品到使用GameBryo,CryEngine,Unreal,到现在用的比较多的Unity引擎,涉猎的比较多。熟话说,熟读唐诗三百首,不会作诗也会吟。学习代码编程跟这个原理是一样的,用的多了自然而然想自己搞一款出来。
做一款引擎我们会用到第三方的库,在这里我把我们需要的库通过图示的方式列出来,后面我们逐步给读者介绍。
手把手教你架构3D引擎高级篇系列二_第2张图片

BGFX

引擎编写首先要把渲染库搞定,一种是自己写,另一种是选择开源的,综合考虑还是选择了后者,也就是选择了BGFX图形库,选开源的图形库本着一个原则:
1、有开源的代码
2、代码一直更新
3、跨平台
以上三项是必备的,编写引擎会选择很多库的,因为好的成熟的东西,我们可以直接拿过来用的,我们不能什么模块都去自己编写,那样效果并不一定好。下面我们就先围绕着BGFX图形库给读者介绍,因为我们需要将其移植到我们的引擎中,所以要对它做一个详细的了解。
首先我们看一下GBFX的源码地址:https://github.com/bkaradzic/bgfx
看一下它能为我们做的事情:
手把手教你架构3D引擎高级篇系列二_第3张图片
上图是从BGFX文档中看到的,网址:https://bkaradzic.github.io/bgfx/overview.html
文档中不仅列出了支持的图形API,支持的平台,还有编译工具。。。。。。
这个也是作为我们考察渲染引擎的一个指标,下面就是要熟悉BGFX了,在文档中有个Build项用于代码的编译,按照步骤就可以实现出来。如果大家还不会,这里有篇博客教程:
https://blog.csdn.net/huangzhipeng/article/details/54672949

编译通过后,我们下面要做的事情是熟悉BGFX,通过它提供的Demo,我们可以把它的执行顺序理顺,再通过函数的调用深入底层查看函数的实现,逐步深入。。。。。。

Lua

Lua作为脚本语言最常用,它的源码下载地址:https://github.com/LuaDist/lua
我们的引擎也将使用Lua作为脚本语言,当然也可以使用C#,类似Unity开发。

crunch

Unity引擎为图片压缩提供了针对不同平台的压缩方式,这样可以减少包体的大小,我们开发引擎也要考虑这方面的需求,所以我们采用了Crunch提供的压缩方案,源码地址:
https://github.com/BinomialLLC/crunch
使用它提供的接口,还可以生成对应的Mipmap贴图。

recast/detour

recast这个工具主要的功能是做网格导航的,跟Unity的NavMesh功能类似。它可以在任何网格上面生成导航网格,而且生成效率很高的,最重要的一点,它是开源的,因此它带有完整的源代码,我们可以根据自己的内容进行自定义。
Detour提供简单的静态网格导航,适用于许多简单的情况,比如平铺导航网格。源代码下载地址:
https://github.com/recastnavigation/recastnavigation
该工具生成导航网格效果图如下所示:
手把手教你架构3D引擎高级篇系列二_第4张图片

SDL

SDL是一个跨平台开发库,旨在通过OpenGL和Direct3D提供对音频,键盘,鼠标,操纵杆和图形硬件的访问,引擎要提供键盘的输入输出,SDL它不依赖于OpenGL和DirectX,适用于引擎开发。
源代码下载地址:http://libsdl.org/download-2.0.php

cmft

cmft 全称是cubemap filtering tool,用于之最CubeMap,可以制作天空盒,实现效果如下所示:
手把手教你架构3D引擎高级篇系列二_第5张图片

而且cmft还有自己的编辑器工具如下所示:
手把手教你架构3D引擎高级篇系列二_第6张图片

源代码下载地址:https://github.com/dariomanesku/cmft

总结

选择以上的库作为第三方开发库,并不是随意选择的,而是多年使用的经验积累,这些库相对来说使用的比较多,经过上线产品的验证。我这里只是简单的介绍了一下,读者还是需要将其编译调试一下,至少把它的执行流程整明白。

你可能感兴趣的:(3D引擎)