翻译《real-time 3d terrain engines using C++ and DX9 》(1)

         系列文章 all by G.I.N ~oo~

心血来潮啊,决定要翻译《real-time 3D terrain engines using C++ and DX9》,希望多广大的游戏爱好者有所帮助。首先声明,没有商业用途的意思(当然不排除要是一不小心弄出本书,小赚一笔的想法,咔咔。。。YY一下)。 本文章原版版权归作者所有,中文版版权归本人所有,其他人未经允许不得转载,或用于商业用途。(模仿人家来个版权声明什么的。。。。汗)
还有还有,水平有限,四六级惨不忍睹。。。。自己也还在学习,所以多多指正(虽然我觉得说得很假)
从第四章开始,主要是觉得前三张介绍的东西不是很具体,如果不会的话看这本书不可能学会的,所以。。。。
 
第四章 GAIA engine overview
在最初的三章里,我们介绍了一些我们开发我们的引擎将要依赖的DX组件:the Directx3D sample framework, the Direcct3D extension library 和 HLSL,在这一部分的最后一章里,我们通过解释一些引擎中的一些关键的资源(resource)来结束这一部分。当你通读整个引擎源代码的时候,你将经常碰到这些类,所以我们花一点时间来给出这些类和他们的功能的概述。
       不要担心这些早期的开发任务看起来有点烦人---确实是这样。然而花准备工作中的少许时间对我们将来进入那些有趣的世界将是非常有帮助。这些简单的类和接口将会为我们接下来的道路上节省很多时间,并且将确保我们我们接下来的写的引擎共享一个一直的框架。我们将通过介绍引擎和实际的编写代码来开始,然后介绍我们将要创建一些特别的资源类型。
       这些资源的细节可以通过阅读提供的源代码获得他们最详尽的细节。在这章里,我们提供每个资源类型的简要介绍以及他们设计中的重点。具体的实现则参看提供的源文件。
 
初遇GAIA,3D地形引擎
       我们将把我们的3D屋外地形游戏引擎叫做Gaia,一个希腊神——大地之母的名字(毕竟这是一个地形引擎)。命名引擎对于维护我们的代码和D3DX支持库的逻辑分隔是非常有用的并且也提供了我们自己定义的类型和外来库中定义的类型的物理分隔。
       许多游戏引擎利用一些特别的第三方库来处理一些特别的任务,比如管理3D音效或者物理仿真。要做到这点,就有必要采取一些步骤来确保我们的引擎代码不会和外部第三方库代码冲突。最简单的办法就是用名字空间(namespace)包装我们的整个引擎,这个名字空间对外界隐藏所有的类,类型和函数声明。这可能会是一些不习惯与名字空间的程序员产生挫败感的地方,但是使用名字空间要比在每个函数和类型中加上词缀来区别他们要高级。
       然而看起来可以试着跳过名字空间转而使用词缀gaia来命名我们的引擎函数,例如gaiaDrawBox(),gaiaPrintText(),这种多余的命名方式将很快陷入麻烦。为了避免我们引擎中类型声明与作者的冲突,gaia的词缀必须被加到每个累,株距类型和函数申明中。
       与使用词缀相比,一个名字空间可以用来隔绝整个引擎。所有全局函数和累定义都在这个空间中声明。这高效的模拟了gaia词缀的作用同时提供了一个捷径来避免它必须被显式的标注。这是因为所有在名字空间gaia中声明的类和函数都自然默认的使用这个名字空间,将程序员从必须显式的在类中使用函数和类型时标明中解放了出来。并且,关键字 using namespace gaia 可以在所有引擎源文件的头部声明来通知编译器:名字空间gaia将被作为默认的名字空间,这有一次模拟了显式的表明词缀。
       对老练的C++程序员来说,使用名字空间来隔绝库代码并不是什么新鲜的东西。标准模板库(STL)做了同样的事情——将所有库模板分装在名字空间std中。如果这对STL——一个别数百万程序员使用的实用类集合中 很好,那么我们这么做也很好。在本书剩余的部分中,我们总是假定已经使用了名字空间gaia,为了让代码读起来更容易一些,名字空间被省略了。
 
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页