游戏引擎_游戏引擎架构 - CSDN
游戏引擎 订阅
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1] 展开全文
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1]
信息
属    性
程序或者组件
外文名
Game Engine
用    途
游戏
中文名
游戏引擎
游戏引擎功能
可见,引擎并不是什么玄乎的东西,无论是2D游戏还是 3D游戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节,以下就对引擎的一些关键部件作一个简单的介绍。首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。其次是动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快,子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个3D物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保了当你撞在墙上的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探测会根据你和墙之间的特性确定两者的位置和相互的作用关系。渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于管理客户端与服务器之间的通信。通过上面这些枯燥的介绍我们至少可以了解到一点:引擎相当于游戏的框架,框架搭好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。因此,在3D游戏的开发过程中,引擎的制作往往会占用非常多的时间,《马克思·佩恩》的MAX-FX引擎从最初的雏形Final Reality到最终的成品共花了四年多时间,LithTech引擎的开发共花了整整五年时间,耗资700万美元,Monolith公司(LithTech引擎的开发者)的老板詹森·霍尔甚至不无懊悔地说:“如果当初意识到制作自己的引擎要付出这么大的代价的话,我们根本就不可能去做这种傻事。没有人会预料得到五年后的市场究竟是怎样的。”正是出于节约成本、缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏,一个庞大的引擎授权市场已经形成。其中最大的收益者是各大网络游戏公司,通过第三方引擎开发的网络游戏获益巨大。但随着市场急剧变化,用第三方引擎开发网络游戏的成本也越来越高。于是游戏引擎开发商们开始绞尽脑汁设计一种可以大量节约开发成本和周期的引擎。直到2010年zerodin引擎开发的巨作Dragona出品引起了各大游戏业巨头关注,因为此时方才发现了巨作也可以用这么少的成本,这么短的时间开发而成。
收起全文
  • 游戏引擎-场景编辑器

    千人学习 2018-10-22 21:38:08
    1.采用Qt作为界面库,通过该项目可以学习到Qt跨平台界面库的使用. 2.实现跨界面的拖拽功能.3. 3.实现属性表(绚酷控件)控件,完全可以在其他的项目中进行复用. 4.实现场景管理,采用节点方式实现高效的场景管理. ...
  • C++游戏引擎开发

    万次阅读 2009-02-06 10:22:00
    游戏引擎开发用C++实现跨平台游戏引擎开发 你是否梦想写一部格斗游戏但却无从着手呢?是否你只因游戏开发好玩而对之感兴趣?本文我们将分析一个通用的跨平台游戏引擎,每个游戏开发新手都可以自由地使用它。 1. 3D...

    游戏引擎开发

    用C++实现跨平台游戏引擎开发

      你是否梦想写一部格斗游戏但却无从着手呢?是否你只因游戏开发好玩而对之感兴趣?本文我们将分析一个通用的跨平台游戏引擎,每个游戏开发新手都可以自由地使用它。

      1. 3D游戏引擎的简短历史

      在游戏开发中,从一开始就确定正确的开发平台是很重要的。是否你的游戏支持Windows,Linux和OS X?是否你的游戏开发只使用OpenGL就足够了?OpenGL是十九世纪九十年代初期设计的,起初只运行于价值约$25,000的Unix CAD工作站上,后来移植到Windows和其它一些低端平台上。与此同时,随着游戏工业的发展,图形加速器价格从$2,000剧跌到你今天看到的价值约$150的大众市场价格。

      确实,许多人都会援引在1996年用OpenGL开发成功的革命性的游戏Quake,作为以上急速发展现象的直接的原因。然而,成功的Quake级的游戏开发标准要求更多:世界级音频支持,网络连接,用户输入设备支持,以及实时的管理能力等。既需要实现跨平台支持又能使游戏效果激动人心,要实现这样的解决方案最好建立一个体面的游戏开发站台。

      2. 用于C++,Java和其它开发语言的简单DirectMedia层

      对,历史就是这样有趣,但并不是每一部游戏都要做成Quake的克隆品。一直被业界许多人吹捧有着许多优点的选择是简单DirectMedia层(SDML)。这是一套跨平台的多媒体库,它提供对于音频,键盘,鼠标,游戏杆,OpenGL和2D视频帧缓冲的低级存取。SDML支持几乎我能想像出的每一个平台,包括Linux,Windows,所有的MacOS变异物,WinCE,Dreamcast还有另外一些操作系统。它被广泛应用于开发MPEG播放器,硬件仿真器,和许多流行的游戏,包括获奖的运行于Linux平台的Civilization:Call to Power。

      SDML用C写成,但生来就与C++一起工作,已经绑定到了另外许多语言,包括Ada,Eiffel,Java,Lua,ML,Perl,PHP,Pike,Python和Ruby。SDML的应用环境简直就没有什么限制,而且它碰巧是我最喜爱的开源飞行模拟器GL-117(见图1)的开发引擎。事实上,513游戏的当前开发已经基于SDML引擎而且被注册到了SDML的主页。


    图1.GL-117中的一个视图


      3. 通道视觉效果演示程序

      研究游戏引擎的最好方法是看一些示例程序代码。简单地看一下图2中用SDML实现的2D通道类型演示图,你就能发现你仅用几行代码所能完成的工作。你可以使用该实例作为一个保护屏程序,音乐可视化动画效果,等等。篇幅所限,我已经整理了实际的绘制代码。请跟随我的注释分析下面对SDML的工作原理的描述:

    #include "Tunnel.h"
    // SDL 相关变量定义
    SDL_Surface *screen,*bBuffer,*Image;
    SDL_Rect rScreen,rBuffer;
    int main (int argc, char **argv)
    {
     int flag = SDL_SWSURFACE;// 请求一个软件表面.
     //软件表面处于系统内存中,
     // 一般不如硬件表面速度快
     #ifdef WIN32
     int fullscreen = MessageBox(NULL, "Show Full Screen (y/n):","Screen Setting", MB_YESNO);
     if (fullscreen==IDYES) {
      flag |= SDL_FULLSCREEN; // 如果用户需要,接管整个屏幕
     }
     #endif
     Tunnel_Timer(); // 读取起始的系统时钟值
     SDL_Init( SDL_INIT_VIDEO ); // 初始化视频子系统
     //把屏幕设置到 320x240,32位颜色
     screen = SDL_SetVideoMode( 320, 240, 32, flag);
     // 如果可用的话,为屏幕表面请求硬件缓冲
     bBuffer = SDL_CreateRGBSurface( SDL_HWSURFACE, screen->w,screen->h,screen->format->BitsPerPixel,
        screen->format->Rmask,
        screen->format->Gmask,
        screen->format->Bmask,
        screen->format->Amask);
     // 这是种子图像,一旦开始它就会盘旋起来
     Image = SDL_LoadBMP( "tunnel_map.bmp" );
     Image = SDL_ConvertSurface(Image, screen->format, SDL_HWSURFACE);
     rBuffer.x = 0;
     rBuffer.y = 0;
     rBuffer.w = bBuffer->w;
     rBuffer.h = bBuffer->h;
     // 忽视大多数事件, 包括 鼠标动作, 并取消光标
     SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
     SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
     SDL_ShowCursor( SDL_DISABLE );
     Tunnel.Set( 320, 240 ); // 通道将填充整个的缓冲区
     Tunnel.Precalc( 16 ); //内部的圆圈直径
     while (SDL_PollEvent(NULL)==0) {
      float fTime = Tunnel_GetTime();
      //在修改前,必须锁定表面,特别当缓冲区处于图形硬件内存中时
      SDL_LockSurface(bBuffer);
      SDL_LockSurface(Image);
      Tunnel.Draw(bBuffer, Image, 180*sin(fTime), fTime*100);
      SDL_UnlockSurface(bBuffer); // 在更新以后你可以开锁
      SDL_UnlockSurface(Image);
      // 把缓冲区中的数据输出到屏幕绘图区域并强迫进行重画
      SDL_BlitSurface( bBuffer, NULL, screen, &rBuffer );
      SDL_UpdateRect( screen, 0, 0, 0, 0 );
     }
     Tunnel.Free();
    }

     


    图 2. 演示旋转和扭曲的2D通道


      4. 对另外一些游戏引擎的探索

      让我们看一下另外一些开源的游戏引擎。

      a) ALLEGRO(Allegro低级游戏开发例程)

      Allegro是一个开源的可移植的库,主要针对视频游戏和多媒体编程。Allegro由Shawn Hargreaves(近来称为Climax)创建,现在成长为一个能够跨越许多操作系统如Linux,Windows,MacOS,MS-DOS和许多另外的流行平台等的游戏系统。

      除了具有一个高级的2D图形库,它能容易地存取鼠标,键盘,游戏杆和高精度定时器中断。Allegro并没有包装或替换OpenGL,但是通过参观他们广阔的开发站点(http://www.allegro.cc/),你能学习怎样把OpenGL集成到Allegro游戏程序中。

      大约有700种不同的游戏工程,与Allegro一起发行,其中最为杰出的两类是街机游戏和谜题游戏。我特别地喜欢经典的街机游戏Zaxxon(见图3)的重制品。


    图3.酷毙的Zaxxon的重制品


      b) Irrlicht:点燃快速实时的3D引擎

      这个Irrlicht 引擎是一个跨平台,高性能实时引擎,用C++写成。你可以选择Direct3D,OpenGL或基于软件的着色技术。高端特点包括动态阴影,粒子系统,人物动画,进门和出门技术和碰撞检测(见图4)。Irrlicht支持Windows和Linux并提供到语言Java,Perl,Ruby等的绑定。业界先驱Nikolaus Gebhardt在他的朋友的少部分帮助下完成的这个引擎工。


    图4.在Irrlicht中的一个十分逼真的场景


      c) ClanLib:为多玩家游戏设计的引擎

      ClanLib提供了一个平台独立的接口来书写游戏-它们有一个共同的到低级库如DirectX和OpenGL的接口。借助于ClanLib,你只需编写少量代码即可在Windows,Linux和OSX系统上开发游戏程序。ClanLib包括一个广泛的声音库,2D碰撞检测,动画,GUI框架和网络库。图5显示了游戏XenoHammer中的一个场景。


    图5.XenoHammer屏幕快照
    用C++实现跨平台游戏开发之Allegro引擎

    要:本文重点讨论开源游戏开发库Allegro(Allegro低级游戏例程),同时涉及到一些深度技术并提供了一个简单的示例程序,帮你进一步确定它是否是适合你的开发平台。

      一、 一个适于多环境的引擎

      Allegro最开始被研发于八十年代后期古老的Atari ST平台上,随后被快速地移植到流行的DJGPP环境(一个在九十年代早期流行的32位的MS-DOS扩展程序)。此后,Allegro被移植到最为流行的Windows C++开发环境中,包括VS,MinGW,Cygwin和Borland C++。另外的支持它的平台包括Linux,BeOS,QNX,Mac OSX以及几乎任何其它带有X11库的Unix平台上。

      Allegro能着色到各种类型的位图和硬件加速的环境中,例如DirectX,XWindows,SVGAlib,FreeBE/AF,CGDirectDisplay,QuickDraw,等等。Allegro并不想提供它自己的3D环境或模拟器,但是OpenGL可以被容易地集成,这是通过使用AllegroGL库-它提供了一个类似于GLUT的接口(包括扩展管理)-实现的。

      二、 性能概要

      在进一步使用API开发前,让我们看一下Allegro提供的总体功能:

      ·具体到像素级的绘图函数,包括平坦阴影,gouraud阴影,纹理贴图,z缓冲的多边形和圆绘制,填充,贝塞尔样条曲线,图案填充,精灵,blitting(位图复制),位图计算缩放和旋转,半透明/光效果以及比例字体支持的文本输出

      ·FLI/FLC(在计算机生成的动画方面,这种格式比MPEG有更高的压缩性能)动画播放器

      ·播放后台MIDI音乐,可达64种同时的声音效果,并能录制样本波形和MIDI输入(声音平台支持,包括WaveOut,DirectSound,OSS,ESD,CoreAudio和QuickTime,等等)

      ·容易地存取鼠标,键盘,游戏杆等设备,还支持高分辨率定时器中断,包括一个DOS版本的垂直折回中断模拟器

      ·读/写LZSS压缩文件的例程

      ·数学函数,包括定点算术,表查找和3D矢量/矩阵/四元数操作

      ·GUI对话框管理器和文件选择器

      ·内建地支持16位和UTF-8格式的Unicode字符

      三、 使用引擎

      使用Allegro进行开发,就象在许多其它游戏场合下一样,游戏的总体结构都包括游戏开始前的初始化,游戏循环以及游戏完成后的清理。初始化意味着既包含Allegro启动代码也包含在开始的位置实现基本地装载或生成你的游戏级别。在创建你的初始化代码时,启动Allegro基本上没有什么代价付出(见图1).

      如果你需要很多屏幕相关的真实性能,建议你首先礼貌地用get_gfx_mode_list()函数查询一下最大可用方式:

    #include <allegro.h> //必须放于系统头文件的引用之后
    set_color_depth(32); // 缺省情况下使用8位颜色
    if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0) {
     abort_on_error("Couldn’t set a 32 bit color resolution");
    }


      set_gfx_mode()的最后两个参数用于指定虚拟缓冲区的大小-我们的图形屏幕存储于其中。这可以使创建一个卷边游戏-其中地形是连续移动的-变得容易。例如,你可能要使虚拟缓冲区,比方说,宽出20%以留出足够的空间来平滑卷动新的精灵和地形。

     四、 一个完整的Allegro实例

      本教程将使用Kee-Yip Chan的SnookerClone演示程序,它是基于James Lohr的另一个具有相同名字的演示程序。图1显示了演示程序的基本屏幕快照。


    图1.Kee-Yip Chan的"SnookerClone"演示程序

      这个工程向你展示了许多不同的Allegro技术,包括动画,键盘输入和鼠标输入,碰撞和游戏物理知识(例如重力)。它利用了三个主要的元素:一个有8个扶手的旋转的车轮,一个用箭头键来控制的大红球,还有一些从顶部往下坠落的蓝球。车轮以接触方式推动红球,而当红球碰上蓝球时,它们之间相互影响。

      下列是完整的Allegro演示程序的代码:

    1 #include <allegro.h>
    2 vector<Point> g_points; //aka球上点的列表
    3 vector<Joint> g_joints; //物理对象列表,如车轮和缓冲器
    4 kVec g_accControl;
    6 int main(void)
    7 {
    8  allegro_init(); // 初始化allegro.
    9  install_keyboard(); // 启动键盘.
    10 install_mouse(); // 启动鼠标.
    11 install_timer(); //过程show_mouse()所需要;
    13 // 创建一个800x600的非全屏窗口.
    14 set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
    16 set_window_title("Kee-Yip Chan’s Snooker Clone");
    17 text_mode(-1); // 文本将被画在透明的背景之上
    19 BITMAP* buffer = create_bitmap(SCREEN_W, SCREEN_H);
      //创建一张位图用于双缓冲.
    21  // 初始化数据.
    22 create_joints(g_joints); //注册车轮、地板和缓冲器的硬编码的屏幕位置
    25 // 创建顶点以组成aka球: 玩家所用球和三个蓝球
    26 // 的位置, 速度, 大小和质量.
    27 g_points.push_back(Point(kVec(100, 300),kVec(0, 0),16, 10));
    // 玩家.
    28 g_points.push_back(Point(kVec(50, 40), kVec(0, 0),12, 5));
    // 中等的球.
    29 g_points.push_back(Point(kVec(80, 40), kVec(0, 0) 12, 5));
    //中等的球.
    30 g_points.push_back(Point(kVec(110, 40),kVec(0, 0),6, 1));
    // 小球.
    32 //主循环,在按ESC键后退出
    33 while(!key[KEY_ESC]) { //检查输入.
    34  if(key[KEY_UP])
    35   g_accControl.y = -0.07; //Jet pack.向上加速
    36  if(key[KEY_LEFT])
    37   g_accControl.x = -0.07; //左走.向左加速
    38  if(key[KEY_RIGHT])
    39   g_accControl.x = 0.07; //右走.向右加速
    41   static bool leftMousePressed = false,
        rightMousePressed = false;
    42  if(mouse_b & 1) { //鼠标左键按下
    43   if(!leftMousePressed){
    44    leftMousePressed = true; // 创建一个新球.
    45    g_points.push_back(Point(kVec(mouse_x, mouse_y),kVec(0, 0), 12, 5));
    46   }
    47  }
    48  if(!(mouse_b & 1))
    49  //保证不重复鼠标按键
    50  //否则,就会出现许多的新球
    51  leftMousePressed = false;
    52  if(mouse_b & 2) { //鼠标右键按下
    53   if(!rightMousePressed){
    54    rightMousePressed = true; // 创建一个新球
    55    g_points.push_back(Point(kVec(mouse_x, mouse_y),kVec(0, 0), 6, 1));
    56   }
    57  }
    58  if(!(mouse_b & 2))
    59   //保证不重复鼠标按键
    60   //否则,就会出现许多的新球.
    61   rightMousePressed = false;
    63   doPhysics();
    65   // 着色:如果我们能再次使用缓冲区,则清除它;
        //否则,旧图像将滞留显示
    66   //用白色进行清除.
    67   clear_to_color(buffer, makecol(255, 255, 255));
    68   for(unsigned i = 0; i < g_points.size(); i++) {
         //画点.
    69    //画一个实心球
    70    circlefill(buffer, //画向缓冲区
    71    g_points[i].position.x,g_points[i].position.y,// aka 球的中心点的位置
    72    g_points[i].size, // 半径.
    73    (i == 0) ? makecol(255, 0, 0) : makecol(0, 0, 255)); //红色如果是玩家;否则为蓝色
    75    // 画一个轮廓球.
    76    circle(buffer, //画向缓冲区
    77     g_points[i].position.x,g_points[i].position.y, // aka 球的中心点的位置.
    78     g_points[i].size, // 半径.
    79     makecol(0, 0, 0)); //红色如果是玩家;否则为蓝色.
    81   }
    83   // 画接合点
    84   for (unsigned i = 0; i < g_joints.size(); i++)
    85    line(buffer, //画向缓冲区
    86     g_joints[i].p1.x, g_joints[i].p1.y, // 点 1.
    87     g_joints[i].p2.x, g_joints[i].p2.y, // 点 2.
    88     makecol(0, 0, 0)); // 黑颜色.
    89    );
    91   // 打印指令.
    92   textout(buffer, font, "Left Mouse Button - new big ball Right Mouse Button - new small ball",
    93     125, 1, makecol(0, 0, 0));
    95   textout(buffer, font, "Arrow Keys - move red ball",
    96     300, 592, makecol(0, 0, 0));
    98   show_mouse(buffer); // 画鼠标光标.
    100   draw_sprite(screen, buffer, 0, 0);// 把缓冲区中的数据画向屏幕.
    101  } // while循环结束
    103  return 0;
    105 }END_OF_MAIN();

      33-101行包括了典型的游戏编程循环模式。游戏继续进行直到玩家按下ESC键退出为止。34-39行支持同时进行的键盘输入,因为你可以按下向上和向左箭头键来获取粗略的斜向运动。

      在41-61行,鼠标动作被捕获到全局变量mouse_b(用于按钮),mouse_x和mouse_y。如果你一直在使用一滚轮鼠标,你还可以使用变量mouse_z。我们对反向弹跳逻辑进行了一点硬编码以确保每次鼠标按下事件只有一个球下落。

      第63行调用doPhysics(),其目的是旋转车轮的线段,更新球位置,检测球碰撞和适当地改变它们的方向矢量。这个模块(350行的数学代码)有点深入了些,但它确实是一个一流的实现,值得你深入研究。

      余下的代码,65-101行,开始着色,在典型的示例程序中这属于常规实现部分。这里的着色用典型的双缓冲区技术,下一次屏幕变化被计算出来并进行脱屏绘制并在最的一毫秒进行缓冲交换(第100行)。这确保了视觉的连续性又减少了烦人的闪烁-对象看上去是随机地绘制的。在着色代码部分,对line()和circlefill()的调用是相当直接的:circlefill()以x,y,半径和填充颜色作为参数。

      textout_ex()函数的功能稍强于textout()(示于92-96行),允许你指定前景和背景颜色。Allegro提供例程以直接从GRX格式.fnt文件,8x8或8x16 BIOS格式.fnt文件,位图图象以及数据文件格式中装入字体。作为选择,你能导入一种大范围的Unicode字体,这可以通过写一个.txt脚本-它为每一范围的字符指定相应的不同的源文件-来实现。如果你想要支持TrueType,那么你需要AllegroTTF或相同功能的插件。
    最后,在第100行的draw_sprite()实现一个覆盖性复制新生成的位图到第14行创建的屏幕对象上。覆盖性复制意指只有非透明的颜色像素被复制。在本例中,我确信它已被退化成一个"blit"(块复制)转储。

      五、 Allegro的音频

      这个snooker演示程序只涉及到了一些最基本的图形和I/O函数,但是并没有用到Allegro的音频开发包。该包中的MIDI混频,音响效果和录音API,其效果达到或超过几乎每一个我所见过的专业的声音库。Allegro音频应用软件大量存在,包括WinCab-一个MP3和OGG Vorbis音乐唱片机,还有LouTronic Rhythm Box-一个鼓声生成合成器,它具有可全面融合到一起的snare鼓,低音鼓和hi hat的效果。下面我们简单地回顾Allegro音频API的一小部分。

      每一个使用音频的程序都应该调用reserve_voices()来指定数字和MIDI声音驱动程序分别使用的声音的数目。接下去,你能控制这些音频轨道的混合.

      你可以非常容易地象下面这样插入一个音轨:

    MIDI *midFile = load_midi("myfile.mid’);
    play_midi(midFile, TRUE);//连续循环

      对于更复杂的需要,你可以安装三个钩子函数之一,它们可以使你拦截MIDI玩家事件。如果被设置为非NULL,这些例程将在每次MIDI消息,元事件和系统独占的数据块中被分别调用。

      Allegro的数字音频系统被设计为从最基本的配置到可高度扩展的。你能容易安装读取器和写入器来处理新的或者不同的音频文件类型, 例如:

    register_sample_file_type("mp3",load_mp3,NULL);//安装MP3读取器

      当正播放数字音频时,你可以随时编辑它。下列代码改变将在播放一个样本参数时改变该样本(用于操作循环播放的声音):

    void adjust_sample(const SAMPLE *spl, int vol, int pan, int freq, int loop);

      你能改变音量,平移音频数据并清除循环标志,在下次执行到循环末尾时,这将停止该样本。如果在播放相同样本的好几个副本,这会调整它遇到的第一个副本。如果该样本没有播放,对它没有任何影响。

     

    用C++实现跨平台游戏开发之Irrlicht引擎

      Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等(见图1)。


    图1.Irrlicht 3D引擎

      Irrlicht是一个德国神话故事中的一种动物的名字,它能够发光和飞翔,可以在大部分的沼泽地附近发现它。单词"Irrlicht"是两个德国单词("irr"意思是疯狂的;而"Licht"意思是光)的组合。在英语中,它被译为"鬼火"。

      Irrlicht十分幸运地为一个巨大的活跃的开发团队以大量的工程所支持。然而,因为Irrlicht主要由游戏名家Nikolaus Gebhardt所设计,所以该游戏在设计上十分连贯。你可以在网上到处发现有Irrlicht的增强程序,如可选用的地形生成器,入口生成器,输出器,world层生成器,相关教程和编辑器等。而且,它独立地创建了到Java,Perl,Ruby,BASIC,Python,LUA甚至更多种语言的绑定。而最为重要的是,它是完全自由的。

      二、 Irrlicht特性

      在深入分析API之前,请让我更具体地介绍一下Irrlicht提供给了3D游戏开发者哪些功能:

      ·一个可以运行于Linux以及Windows 98,ME,NT,2000和XP(MacOS在计划之中)等操作系统之上的引擎

      ·针对Direct3D 8生成器或Direct3D 9生成器(可选)提供了Anti-aliasing支持

      ·可换肤的GUI环境(包括一个很酷的具有金属质地的带阴影的皮肤),给一些老式的对话框加上漂亮的外观

      ·场景管理系统,它允许无缝的室内/室外过渡

      ·角色动画系统,带有骨骼和变形目标动画功能

      ·一个特殊的效果系统,包括粒子效果(雨,烟,火,雪,等等),告示板,灯光贴图,环境,地图,模板缓冲区阴影,雾,纹理动画,视差贴图,凹凸贴图,还有更多

      ·内建的材质支持,包括支持Pixel and Vertex Shaders版本1.1到3.0,ARB Fragment and Vertex程序以及HLSL(GLSL正在计划中)

      ·.NET语言绑定,这使得引擎可用于所有的.NET语言例如C#,Visual Basic.NET以及Delphi.NET

      ·一内建的平台独立的软件生成器,特性有:z-缓冲,Gouraud阴影,alpha混合和透明性,还有快速的2D绘图(见图2)

      ·你久已期待的2D绘图功能,例如alpha混合,基于关键色的位图复制,字体绘制,以及混合3D与2D图形

      ·能直接导入常见的建模文件格式:Maya,3DStudio Max,COLLADA,DeleD,Milkshape,Quake 3 levels,Quake2 models,DirectX,Pulsar,My3DTools,FSRad以及Cartography Shop

      ·能直接从BMP,PNG,Photoshop,JPEG,Targa和PCX导入纹理

      ·快速而易用的碰撞检测与响应

      ·为快速的3D运算和容器模板库进行了优化处理

      ·直接读取档案(可能是压缩的,如.zip文件)

      ·集成了快速的XML分析器

      ·为实现容易的本地化开发提供Unicode支持


    图2:基于Irrlicht的游戏Yet Another Space Shooter(YASS),这里显示的是一个静态游戏帧中的令人吃惊的着色效果
      三、 在Irrlicht中的特殊效果

      在本文的例子中,我将向你展示怎样使用模板缓冲区影子技术,还有粒子系统,告示板,动态光以及水表面场景结点等技术。参见图3。


    图3.结合动态的光和水进行的场景着色

      Irrlicht引擎自动地检查是否你的硬件支持模板缓冲;而如果不支持,则不启动阴影。在这个演示程序中,在方法createDevice()中的’shadows’标志被置位,以产生从一个动画角色投下的动态影子。如果这个实例程序在你的PC上运行太慢,可以把这个标志设置为false或者干脆再买一块更好些的图形加速卡。

      为能够使用Irrlicht.DLL文件,你需要链接到Irrlicht.lib库文件。你可以在工程设置对话框中设置这个选项;但是为了容易实现,你可以使用一个pragma预编译注释命令。方法createDevice()负责实例化根对象-它使用引擎完成一切事情。参数如下:

      ·deviceType:设备类型。当前你可选取Null设备以及软设备,如DirectX8,DirectX9或OpenGL。

      ·windowSize:要创建的窗口的大小或全屏幕模式。这个例子中使用512x384。

      ·bits:每像素位数(当在全屏幕情况时)。仅允许值为16或者32。

      ·fullscreen:指定是否你想使设备运行于全屏幕方式。

      ·stencilbuffer:指定是否你想使用模板缓冲区以用于绘制阴影。

      ·vsync:指定是否你想启动vsync(仅在全屏幕情况),可选。

      ·eventReceiver:一个接收事件的对象,可选。

      为适合于本实例环境,你将装载一个3D Studio Max文件(一幢房子)。该房子看起来并没有什么特别的,但是Irrlicht引擎能为你创建一个相当酷的纹理贴图。只需使用造型操纵器并为之创建一个planar纹理贴图即可:

    #include <irrlicht.h>
    #include <iostream>
    using namespace irr;
    #pragma comment(lib, "Irrlicht.lib")
    int main()
    {
     //让我们假定用户在本例中使用OpenGL
     //当然,也可以指定DirectX 8, 9, 等等.
     video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
     //创建设备,如果创建失败立即退出。
     IrrlichtDevice *device = createDevice(driverType,
     core::dimension2d(640, 480), 16, false, true);
     if (device == 0)
      return 1;
     video::IVideoDriver* driver = device->getVideoDriver();
     scene::ISceneManager* smgr = device->getSceneManager();

      我对从这个导入文件产生的发射光线颜色的效果并不满意。下列代码显示怎样实现这些步骤:

    scene::IAnimatedMesh* mesh = smgr->getMesh("room.3ds");
    smgr->getMeshManipulator()->makePlanarTextureMapping(
    mesh->getMesh(0), 0.008f);
    scene::ISceneNode* node = 0;
    node = smgr->addAnimatedMeshSceneNode(mesh);
    node->setMaterialTexture(0, driver->getTexture("wall.jpg"));
    node->getMaterial(0).EmissiveColor.set(0,0,0,0);

      四、 水动画

      你将添加的第一个特殊的效果是水动画。为此,WaterSurfaceSceneNode导入一个造型文件并使之象水表面一样地波动。如果你让这个场景结点使用一种相当好的材质如MT_REFLECTION_2_LAYER,那么它看起来相当酷:

    mesh = smgr->addHillPlaneMesh("myHill",
    core::dimension2d(20,20),
    core::dimension2d(40,40), 0, 0,
    core::dimension2d(0,0),
    core::dimension2d(10,10));
    node = smgr->addWaterSurfaceSceneNode(mesh->getMesh(0),3,300,30);
    node->setPosition(core::vector3df(0,7,0));
    node->setMaterialTexture(0,driver->getTexture("water.jpg"));
    node->setMaterialTexture(1,driver->getTexture("stones.jpg"));
    node->setMaterialType(video::EMT_REFLECTION_2_LAYER);

      作为输入造型,你可以创建一个陡峭的平面造型,但是你也可以为此使用任何其它的造型。你甚至能重用room.3ds输入文件(它看上去确实很奇怪)。该实例还用一个普通的石头纹理模型来绘制所有另外的表面。

      五、透明的告示板和灯光

      第二个特殊的效果是很基本的但是非常有用:一个透明的告示板,伴之有一个动态的灯光。为产生这种效果,你只需要产生一个灯光场景结点,并让它四处飞行;而且,为了让它看起来更酷一些,可以把一个告示板场景结点依附到它上面:

    //创建灯光
    node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
    video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);
    scene::ISceneNodeAnimator* anim = 0;
    anim = smgr->createFlyCircleAnimator(core::vector3df(0,150,0),250.0f);
    node->addAnimator(anim);
    anim->drop();
    // 把告示板依附到灯光
    node = smgr->addBillboardSceneNode(node, core::dimension2d(50, 50));
    node->setMaterialFlag(video::EMF_LIGHTING, false);
    node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
    node->setMaterialTexture(0,driver->getTexture("particlewhite.bmp"));

     

     六、 粒子系统

      下面介绍的这个特别效果更有趣:一个粒子系统。在Irrlicht引擎中,粒子系统既是组件化的,也是可扩展的,但是仍然易于使用。你只需要简单地把粒子发射器放到一个粒子系统场景结点,这样以来粒子看上去没有产生源。这些发射器可以据需要进行灵活配置,并经常带有许多参数,如粒子方向,粒子数量,以及粒子颜色等。

      当然,发射器类型有区别(例如,一个点发射器能够使粒子从一个固定的点上发出粒子)。如果该引擎提供的粒子发射器还不能满足你的要求,你可以容易地创建你自己的发射器。这只需简单地从IParticleEmitter接口派生一个新类并使用setEmitter()方法把它依附到粒子系统上去即可。

      下一个实例将创建一个盒子粒子发射器。你可能已经猜出,它从一个跳跃的盒中随机生成粒子。由参数来定义盒子,粒子的方向,每秒产生粒子的最小和最大数目,颜色以及粒子的最小和最大生命周期。

      一个完全由发射器组成的粒子系统将是令人生厌的,因为缺乏真实感。因此,Irrlicht支持粒子影响器-它负责在粒子到处飞扬时予以修整。一旦添加到粒子系统上,它们就能模仿另外的更真实的效果,象重力或风。在本例中的粒子影响器只是简单地修改粒子的颜色来产生一种淡出效果。

      可能你已经猜出,粒子影响器是通过派生IParticleAffector接口实现的,然后通过使用addAffector()方法把它添加到粒子系统上去。在你为该粒子系统设置了一种好看的材质后,你就有了一个看上去相当酷的野外宿营火的效果。通过调整材质,纹理,粒子发射器,还有影响器参数,你能容易地创建烟雾,下雨,爆炸,下雪等效果:

    scene::IParticleSystemSceneNode* ps = 0;
    ps = smgr->addParticleSystemSceneNode(false);
    ps->setPosition(core::vector3df(-70,60,40));
    ps->setScale(core::vector3df(2,2,2));
    ps->setParticleSize(core::dimension2d(20.0f, 10.0f));
    scene::IParticleEmitter* em = ps->createBoxEmitter(
    core::aabbox3d(-7,0,-7,7,1,7),
    core::vector3df(0.0f,0.03f,0.0f),
    80,100,
    video::SColor(0,255,255,255), video::SColor(0,255,255,255),
    800,2000);
    ps->setEmitter(em);
    em->drop();
    scene::IParticleAffector* paf =ps->createFadeOutParticleAffector();
    ps->addAffector(paf);
    paf->drop();
    ps->setMaterialFlag(video::EMF_LIGHTING, false);
    ps->setMaterialTexture(0, driver->getTexture,"particle.bmp"));
    ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);

      七、 影子投射

      最后但也不容忽视一个问题是,你需要为一个动画角色产生一个动态的影子。为此,你装载一个Quake2.md2模型文件并把它放到你的world上去。为了创建影子,你只需要调用方法addShadowVolumeSceneNode()。你可能通过调用ISceneManager::setShadowColor()来控制影子的颜色;注意,这仅是全局可调整的,并影响所有的影子。好,下面就是你的产生动态影子效果的代码:

    mesh = smgr->getMesh("../../media/faerie.md2");
    scene::IAnimatedMeshSceneNode* anode = 0;
    anode = smgr->addAnimatedMeshSceneNode(mesh);
    anode->setPosition(core::vector3df(-50,45,-60));
    anode->setMD2Animation(scene::EMAT_STAND);
    anode->setMaterialTexture(0, driver->getTexture("../../media/Faerie5.BMP"));
    anode->addShadowVolumeSceneNode();
    smgr->setShadowColor(video::SColor(220,0,0,0));

      八、 游戏循环

      最后,你能进入由device->run()方法控制的游戏循环。该循环将不断运行,直到通过获取一个关闭窗口事件(例如在Windows操作系统下的ALT-F4击键)来退出设备。你必须在一个beginScene()和endScene()命令对之间绘制每样东西。beginScene()用指定的一种颜色清屏,如果需要的话,可以同时清除深度缓冲区。然后你就可以让场景管理器和GUI环境来绘制它们的内容。随着调用endScene(),每一样东西都被绘制到屏幕上去。在本例中,你还可以动态地在标题栏上显示帧每秒(FPS)数,这对于严肃的游戏开发者是十分重要的事情:

    scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS();
    camera->setPosition(core::vector3df(-50,50,-150));
    int lastFPS = -1;
    while(device->run())
    {
     driver->beginScene(true, true, 0);
     smgr->drawAll();
     driver->endScene();
     int fps = driver->getFPS();
     if (lastFPS != fps)
     {
      core::stringw str = L"Campfire FX example [";
      str += driver->getName();
      str += "] FPS:";
      str += fps;
      device->setWindowCaption(str.c_str());
      lastFPS = fps;
     }
    }
    device->drop();

      结束循环后,你必须删除先前用createDevice()方法创建的Irrlicht设备。通过使用Irrlicht引擎,你应该删除所有你用以’create’开头的方法或函数创建的所有对象。你可以通过简单地调用device->drop()来删除该设备对象。

      九、你可能喜欢的Irrlicht插件

      正如在前面所介绍的,Irrlicht有一群勤奋的独立开发人员并为之产生了大量的插件,也用之开发了相当多的游戏。这些开发者中提出的许多的改进被再次集成到Irrlicht的随后的发行版本中。下面我列举其中的几个例子,我想这会吸引许多颇有前程的开发者感兴趣:

      ·OCTTools,是一套用于Irrlicht的工具,由Murphy McCauley所创建,用于操作OCT文件相关的:输出器,加载器,甚至更多。

      ·ICE(Irrlicht通用引擎)是一个开发框架,它提供了一个工程的轮廓实现,从而加快了新工程的开发。

      ·MIM,由Murphy McCauley所创建,是一个非常有用的基于XML的文件格式,可用于Irrlicht的加载器,转换器及其各种工具。

      ·My3D是一个开发工具包,它能够使你把来自于各种3D包(3DStudio MAX,Giles,等等)中的灯光贴图场景直接输出到Irrlicht中。

      ·Dusty引擎允许程序员创建"任务"-这些"任务"可以完成程序员想做的任何事情。之后,这些任务被添加到一棵普通的任务树上去,而每个任务可以有它们希望数目的孩子任务。任务"组"允许游戏设计者在一棵完整的树上执行普通的操作,例如暂停,继续或破坏等。

      ·Irrlicht RPG(Erring Light)是一个3D 绕行走游戏引擎,最初是针对RPG类游戏开发的。

      ·2D 图像和精灵类组成了一个很有用的库,它扩展了Irrlicht的2D能力。

      ·Zenprogramming站点,提供第一个针对Irrlicht的非正式的外部地形生成器,此处也提供很多相关的教程。

     

     

    展开全文
  • 游戏开发入门(十一)游戏引擎架构

    万次阅读 多人点赞 2018-03-03 11:22:29
    链接:游戏开发入门(十一)游戏引擎架构(8节课 时常:约2小时40分钟) 该堂课是对游戏引擎内容的一个概括总结,同时也是对游戏开发技术的一个相当全面的总结。 正如我在开篇所提到的,游戏引擎架构的学习有助于...

    链接:游戏开发入门(十一)游戏引擎架构(8节课 时常:约2小时40分钟)

    该堂课是对游戏引擎内容的一个概括总结,同时也是对游戏开发技术的一个相当全面的总结。
    正如我在开篇所提到的,游戏引擎架构的学习有助于我们建立一个对游戏全局性的认识。


    笔记与总结(请先学习视频内容)

    下面我会按照视频的顺序自底向上的简单讲解各个概念,参考文中最后的架构图(英文版与中文版可以对照着看)。

    1.游戏引擎
    就如汉字最开始是由图案构成的一样,游戏引擎一开始也只是一个单独的游戏。当人们不断的制作新的游戏的时候,发现很多功能是通用的,没有必要做重复的内容。所以,人们开始对游戏里面的功能进行抽象总结,这样在开发新的游戏的时候可以直接使用之前的成果,即节省时间,又可以避免很多前人遇到的坑。
    这些由之前开发游戏的经验与成果所抽象总结的一个系统就是游戏引擎。一个成熟的游戏引擎应该尽可能的通用于各种游戏制作,提供一套完善的制作流程。各个游戏大厂一般都有自己的游戏引擎,其他小型公司一般使用的是商业游戏引擎,如Unity,UE4。

    2.架构
    架构是一个系统的草图,描述了构成系统的抽象组件以及他们之间的关系。任何一个稍微复杂一些的软件系统都需要一个合适的架构,对于如此复杂的游戏引擎,当然更为需要。

    3.第三方软件开发包
    也就是常说的第三方库,包括静态库与动态库。别人写好的封装好的代码库,引入之后直接调用。

    4.平台独立层
    这里面的内容并不是说与平台完全无关,而是说其基本的逻辑在各个平台大致是相同的,而且几乎都是必须要用到的。其中的差异通过适配器来适配到各种平台。

    5.原子类型与原子操作
    这个偏向于操作系统层面,所谓原子就是不可拆分的。在操作系统底层,一般只有bool,int等类型是可以被各个系统识别的,我们在高级语言所写的类在系统底层都会被转换为原子数据来操作。

    6.定时器
    游戏中定时器是一个非常重要的内容,很多游戏逻辑都需要,比如每隔2秒恢复10点生命值。为了提高游戏各项精度,很有必要提供一个高精度的定时器。

    7.Graphics Wrappers 图形包裹类
    图形抽象层,动态切换DX/OpenGL

    8.Moudule模块
    游戏引擎相当复杂,我们需要将其拆分成各个模块来便于我们理解与使用。如渲染模块,物理模块,音效模块,动画模块等,不同的引擎在模块的设计上不同。

    9.字符串
    我们看到在核心系统架构内,字符串被单独拿出来,证明其独特性。字符串的复杂性主要在于编码,同样的内容不同的编码其二进制数据是不同的,我们在进行本地化(国际化)的时候不得不面对这个问题。另外,hash string表示将一个字符串转换成一个数值,在服务器验证的时候经常用到。
    关于编码的相关讲解:
    Unicode 和 UTF-8 有何区别?https://www.zhihu.com/question/23374078
    字符集详解(一看就懂系列)http://blog.csdn.net/u012999985/article/details/77619368

    10.调试
    一般分为断点调试与日志输出调试,好的调试方法可以快速的定位问题。下一节还会更详细的描述。

    11.语法分析器
    其实可以理解为XML等文件解析器,方便我们使用XML等描述游戏对象,做相关配置

    12.性能分析
    一般的引擎都会提供相关的性能分析工具,比如unreal内置的Profiler。当然,我们还可以选择一些其他的工具,比如Intel的vtune。

    13.引擎配置
    游戏引擎里面有太多的参数需要我们配置了,如何方便的修改配置并应用?常见的手段就是ini文件,通过简单的修改配置文件里面的内容,可以在引擎启动时就调整某些内置选项,比如光照精度,游戏控制等等。很多游戏项目里面也经常会用到配置文件。

    14.曲线
    学过图形学的朋友应该比较熟悉,常见的曲线有B样条与贝塞尔曲线。我们游戏中摄像机移动,各种渲染插值都会用到曲线。

    15.RTTI、反射、序列化

    • RTTI是运行时类型识别,C++基本概念。简单来说就是在运行的时候可以判断一个对象的类型。
    • 反射是在RTTI的基础上提供有关类的更详细的信息。
    • 序列化就是将类对象保存到磁盘并能在之后正确的加载还原出来。

    16.唯一标识符
    这个在网络里面经常用到,比如给一个网络玩家添加一个唯一标识,给一个同步对象添加唯一标识,一般叫做GUID。

    17.游戏资产
    简单理解就是各种文件了,动画资源文件,图片文件,字体文件,地图文件等等。这么多种类型的文件当然需要一个统一的管理与解析,资源管理也是非常复杂的一个模块,有点像一个小的操作系统了。

    18.材质与纹理
    直接参考链接:贴图、纹理、材质的区别是什么?

    19.摄像机
    摄像机的位置决定了渲染的内容

    20.物理
    核心内容:动力学与碰撞
    其他内容:射线检测,一般在带有物理的引擎中,所有的射线检测都是基于物理的。射线检测非常好用,一般我们的无实弹枪的命中,障碍检测都需要射线检测。

    21.BSP树
    BSP树与八叉树各有什么优劣,分别有什么应用场合?https://www.zhihu.com/question/29739023

    22.关于剔除
    渲染我们值只渲染玩家可见的部分,其他的剔除。有些数量庞大的对象我们只加载玩家附近的,其他的剔除。

    23.光照贴图
    动态光照对cpu以及gpu的消耗是很大的,为了减小开销。我们可以将静态的光照贴图贴在对象上从而代替动态关照。

    24.动态阴影
    http://www.cppblog.com/shadow/archive/2005/12/23/1991.aspx

    25.贴花Decal
    就是将一个面片贴到指定的模型上来表现新的图案效果,比如子弹打在地上的弹孔。贴花是在触发时临时创建的带图案的模型,并不是直接在原来的模型上绘制。

    26.HDR与后处理
    前面渲染部分有讲解 http://blog.csdn.net/u012999985/article/details/79090657

    27.环境映射EnvironmentMapping
    这里翻译成环境映射比较好,环境映射是一种用来模拟光滑表面对周围环境的反射的技术。而环境贴图一般指CUBEMAP,属于环境映射的基本实现方式。

    28.PRT
    PRT是指Precomputed Radiance Transfer,光辐射传输预计算。把辐射率的传输(包括阴影和相互反射的关系)预生成球谐函数(spherical harmonics, SH)的系数存储在几张纹理中(SH lightmap).然后,存储静态 light probe 的 SH,或动态地把光源生成 SH,点积后就可以得到含有环境光照、阴影和相互反射的全局光照效果。[引用自知乎Milo Yip回答]
    简单来说就是实现全局光照。

    29.层级式物体依附
    这个翻译到汉语有点绕口。其实本意就是骨骼关联,我们可以将任意一个对象Attach到任何一个骨骼上面。骨骼是层级关系,被attach的对象就会跟着这个骨骼保持一致,不会受这个骨骼的子骨骼影响。

    30.MatchMaking
    这一块涉及到网络游戏的游戏模式,涉及到游戏大厅内直接玩,还是单独开房间,如何匹配等问题。一般引擎都会提供相关的接口来对接,不过很多细节还需要游戏项目自己去写。

    31.音频
    一般分为音效和音乐,音效是简短的几秒的声音,音乐一般是长时间播放的背景音乐。引擎应该提供渐变,混合等效果,3D游戏引擎还需要提供三维音频模型。

    32.前端FrontEnd
    前端这一块主要指UI,包括HUD与内置GUI。
    IGC表示利用游戏内容实时录制动画,很多过场动画都是这么做的,比CG要节省太多成本。

    33.静态与动态元素
    一般在游戏世界,那些在整个游戏过程中位置不会移动的就是静态元素,如建筑,地形,草木。可以与玩家产生位移交互的一般就是动态元素,如NPC,动物等。当然,这不是绝对的,任何东西理论上你都可以把他做成是动态的,不过很明显二者在实现上有很大的差异。

    34.世界载入
    所有在游戏场景的物体都需要从硬盘载入到内存中运行,这个过程就是World Loading。涉及到场景加载还有很多技术,比如流式加载,可以用于大世界场景的动态加载。

    35.脚本
    脚本方便程序修改,可以像资源一样热更新到程序里面。

    36.游戏专用子系统
    这里就是指我们常见的各种游戏逻辑模块,如道具模块,武器系统,成就系统等。当然,游戏引擎没有必要去实现这些内容,因为他们属于游戏项目逻辑。不过,鉴于大部分引擎都是基于游戏项目演变的,所以不同的引擎会构建不同的游戏GamPlay框架,如虚幻4的游戏框架就是基于FPS的,非常适合FPS游戏项目的开发。

    37.玩家机制
    这个博主觉得也可以叫做玩家角色控制模块,就是指你是如何控制你的角色移动,动作表现,相机位置,碰撞等内容的。

    38.游戏摄像机
    前面提到的摄像机是从渲染底层来看的,他决定了渲染的内容。不过在游戏逻辑这一块,我们主要在乎的是他的位置。是一直跟随着玩家,还是可以通过上帝视角查看,这都是游戏逻辑需要控制的。

    39.人工智能
    理论上如当前火爆的AI技术一样,你可以用深度学习,机器学习去操作影响AI角色的表现。但实际上,大部分游戏里面的AI角色都是比较“低能”的,只要会简单的寻路,简单的感知即可。原因很简单,我花费最简单的逻辑就能让玩家体验到逼真的AI了,何必搞得那么复杂。
    当然,这并不是不需要去深入探索游戏AI,目前还是有很多游戏领域的人在这个方面探索的。

    40.常用开发工具
    引擎开发IDE:Visual Studio
    版本管理:SVN,Git

    41.Debug,Release
    主要差别有一下几点:

    1. Debug模式下程序没有优化,可以断点
    2. Debug模式很多代码会做更多的检测,如数组越界。导致有时候在Debug有断言中断的位置,换成Release就没有任何问题。
    3. Debug模式下编译出来的程序比Release大的多,而且跑起来也可能慢的多。

    42.软件的主要构成
    视频中讲师的理解是:算法+数据结构+设计模式

    43.游戏开发常用的数学知识
    向量运算,三角函数,矩阵运算,四元数,随机数,坐标系运算(笛卡尔坐标系、极坐标系、球坐标系),空间变换,以及其他的几何学(点到面的距离,点是否在几何体内等),微积分

    44.内存管理
    涉及到内存碎片,内存分配,内存泄露,虚拟内容等内容,这部分内容可以找一本操作系统的书来学习一下。

    45.容器
    就是我们常说的数据结构,包括堆、栈、数组、链表、树、图、队列等。注意他们的特点与使用场景,比如是不是连续内存,是不是动态改变大小等。

    46.I/O
    I/O即输入/输出(Input/Output),一般指磁盘IO与缓存IO。我们在读写时可能需要将磁盘内容写到内存,内存写到缓存,缓存写到寄存器等等操作,一般这些操作是很耗时间的。所以CPU不能在IO时干等着,他会将任务交给DMA去处理,这样整个IO对CPU的消耗就大大减轻。不过即使如此,在上下切换时也要消耗CPU的时间,所以减少IO的数量还是很有必要的。

    47.游戏循环与渲染循环
    其实整个游戏本质上就是一个无限循环的程序,所有的逻辑都在循环里面处理。
    同理,渲染模块本身也是一个循环,里面会有更新相机,更新场景元素,开始渲染,输出到屏幕等操作。

    48.对象组件模型
    很多游戏引擎都采用这种模式来构建游戏对象,组件模型通过将多个功能独立包装成单独的组件,可以自由的装配或或拆卸。达到了很好的解耦效果,增加了组件的通用性与灵活性。

    这里写图片描述
    这里写图片描述

    上一篇:游戏开发入门(十)游戏中的网络模块
    下一篇:游戏开发入门(十二)游戏开发全总结

    原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/79369542

    展开全文
  • 游戏引擎大全

    千次阅读 2015-10-22 20:35:32
    游戏引擎列表 免费和开源引擎 Agar – 一个高级图形应用程序框架,用于2D和3D游戏。 Allegro – 基于 C/C++ 的游戏引擎,支持图形,声音,输入,游戏时钟,浮点,压缩文件以及GUI。 Axiom 引擎 – OGRE的衍生...

    游戏引擎列表
    免费和开源引擎

    Agar – 一个高级图形应用程序框架,用于2D和3D游戏。
    Allegro – 基于 C/C++ 的游戏引擎,支持图形,声音,输入,游戏时钟,浮点,压缩文件以及GUI。
    Axiom 引擎 – OGRE的衍生引擎。
    Baja 引擎 – 专业品质的图像引擎,用于The Lost Mansion。
    Boom – Doom代码的一部分。由TeamTNT开发
    Build 引擎 – 一个第一人称射击游戏引擎,用于Duke Nukem 3D。
    Bullet – 开源物理引擎,广泛应用在各大游戏主机。
    BYOND – “Build Your Own Net Dream”的縮写,支持各种类型的游戏,包括MMORPG。
    Ca3D-引擎 – 一个比较成熟的引擎,有自己的SDK,世界编辑器等。
    Cadabra 3D 引擎 – 用于快速开发3D游戏。
    Catmother – 一个基于BSD授权的引擎,只限个人使用,不能做商业用途。是一家游戏公司的开源引擎。
    CheapHack – 一个已经过时的TomazQuake衍生引擎。
    Crystal Entity Layer – Crystal Space 3D 引擎的扩充
    Crystal Space – 3D应用程序的常规框架。
    Cube – Cube2 ──> Sauerbraten
    DarkPlaces – 高级开源3D引擎之一。
    Delta3d – 整合和其他知名免费引擎,最初由美国军方开发。
    DGD – 一个面向对象的MUD引擎。
    Doom 引擎 – 现在已经免费的引擎,曾用于Doom和Doom II
    DXFramework – 一个简单,带有教学性质的2D/3D引擎,基于DirectX和Visual Studio
    DX Studio – 一个专业3D引擎,附带编辑器套件,由Worldweaver公司开发。
    Eclipse – 一个2D MMORPG编辑器。
    Elysium Source – 2D网络游戏引擎,VB6开发。
    Engine 001 – 2D 动作类RPG游戏编辑器。
    Epee 引擎 -一个2D/3D开放源代码图像引擎,多平台。
    Eternity 引擎 – Doom引擎的改进。
    Exult – Ultima VII使用的引擎的开源版。
    FIFE – 辐射1和2使用引擎的克隆。
    Game Blender – Blender的子项目游戏引擎,用于开发游戏。
    Game Maker – 面向对象的软游戏开发平台,支持拖放编辑以及其自己的脚本语言。
    GQ – 一个Quake引擎,增添了来自TomazQuake和DarkPlaces的许多新特性。
    GZDoom – 基于ZDoom的引擎。
    Genesis3D – 用于Windows的3D实时渲染引擎
    GemRB – Infinity Engine的一个免费的软件实现。
    G3DRuby – 用于高级3D图形。
    Haaf’s Game Engine – 一个使用硬件加速的2D游戏引擎。
    Irrlicht 引擎 – 一个多平台高质量的3D图形引擎。
    ioquake3 – 一个基于id Tech 3的引擎
    Gosu 2D游戏开发库,用于C++。
    Jogre – 一个基于Java的网络游戏引擎。
    MRPGe – Visual Basic开发的2D RPG游戏引擎,附带内置的脚本支持,可定制化强,正在开发阶段。
    M.U.G.E.N – 2D格斗游戏引擎。
    Multiverse Network – 网络游戏开发平台,包含服务端、客户端,以及一些开发工具(对个人免费)
    Nebula Device – 由德国的游戏开发工作室开发的实时渲染3D引擎。
    NeL 引擎 – 用于开发网络游戏的引擎。
    OctLight – Java游戏引擎,基于OpenGL。
    Open Dynamics Engine – 物理引擎
    Open Game Engine – 一个开源引擎,包含开发游戏所需的各种组件。
    OGRE Engine – 一个非常流行的面向对象图形渲染引擎,亦称OGRE3D。
    Online RPG Maker – 一个2D网络游戏引擎,以脚本方式编辑。
    Panda3D 引擎 – 基于Python的快速开发游戏引擎。
    PlayerWorlds – 一个简洁且广泛使用的2D网络游戏引擎。
    PLIB – 包含3D、音效、GUI、窗口管理。支持Linux/Windows/MacOSX。
    ProQuake – 更动过的Quake引擎。
    Pygame – python游戏引擎,作品见PyWeek
    毁灭公爵II引擎 – Quake II的引擎。
    毁灭公爵III引擎 – Quake III的引擎。
    Reality Factory – 一个开源引擎,面向非程序员开发,基于Genesis3d图形引擎。
    Raydium – Maniadrive 使用
    RealmForge – 用于微软 .NET Framework的引擎,Visual3D.NET的原始版本。
    Sauerbraten – 一个基于Cube引擎的优化版。
    Sonic Robo Blast 2 – 深度修改的Doom Legacy引擎
    Soya 3D – 基于Python的开源3D引擎
    Stratagus – 一个多平台即时战略游戏引擎。
    Telejano – Quake引擎的修改版。
    Tenebrae – Quake引擎的修改版。
    Toi – 一个正在开发的3D游戏引擎,可用于单机和网络游戏开发。
    Tomb4 – The engine used to play custom Tomb Raider games built using TRLE (Tomb Raider Level Editor)
    vbGORE – 用Visual Basic 6开发的网络游戏引擎(通过3D函数表达2D图形)
    Well of Souls – 基于脚本化编辑的2D引擎,附带可视化世界编辑器。
    Yake – 组件化,面向对象化的的引擎。
    Zak 引擎 – 为业余和专业游戏开发者开发的2D引擎,基于DirectX 8.1和9。 支持脚本、贴图地图、音效、粒子系统等
    商业引擎

    Arcane 引擎 – Wolfpack Studios为《Shadowbane》开发的引擎
    Aurora 引擎 – 为RPG研发的引擎。
    Beyond Virtual – 一个面向对象化的实时渲染3D引擎,表现优秀。
    Blade3D – 基于Microsoft XNA的新一代引擎。
    BRender – 一个即时渲染3D引擎,用于电脑游戏,模拟器,绘图工具开发。
    C4 Engine – Eric Lengyel开发的下一代电脑游戏引擎
    Chrome Engine – 支持DirectX 10的下一代游戏框架,主要用于FPS游戏(Windows, Xbox 360),由Techland开发。
    Coldstone game engine – an old game creation suite for Macintosh/Windows to create role-playing or adventure-style games
    CryENGINE, CryENGINE2 – CryENGINE是《孤岛惊魂》的游戏引擎。 CryEngine 2 是Crytek为开发《孤岛危机》研发的新一代游戏引擎。
    Dagor Engine 3 – A high-tech cross-platform game engine (3D, physics, game logic) with rich toolset for content development
    Deep Creator – A 3D game engine
    Doom 3 engine – Used by the games Doom 3, Quake 4, Prey and Quake Wars
    EAGL (EA Graphics Library) – A cross-platform graphics engine used by Electronic Arts in their EA Sports titles.
    Earth-4 Engine – The graphics engine used in Earth 2160
    Electron engine – Currently in development by Obsidian Entertainment for their game Neverwinter Nights 2, based on the Aurora engine
    euphoria – A real-time motion synthesis engine by NaturalMotion
    Explorations – 2d MMO creator
    FPSCreator – 3D First Person Shooter creator
    Frostbite Engine- Game engine used for the next-gen title Battlefield: Bad Company
    Gamebryo – A cross-platform 3D computer graphics engine coded in C++
    GFX3D – 目标公司为旗下的数款游戏开发的引擎。
    Havok[1] – Very High-tech cross platform (PC, PS3, Xbox 360 etc) middleware Engine.
    IMUSE – Specifically designed to synchronize music with visual action
    INSANE – Used in LucasArts games
    Infinity Engine – Allows the creation of isometric computer role-playing games
    Jedi – A game engine developed by LucasArts for Star Wars: Dark Forces and Outlaws
    Kaneva Game Platform – A full featured MMOG engine for independent and professional game development
    KjAPI – A C++ technology to create games and 3D applications for PC computers
    Lithtech – A competing alternative to the Quake, and Unreal engines.
    Lithtech Juipter Ex – A new generation Lithtech engine developed by Monolith to create the game F.E.A.R.
    Medusa – A C++ 3D game engine developed by Palestar and used in the DarkSpace MMO. It features distributed world simulation, single tool version control and asset realisation, cross-platform compatibility and an integrated client/server network system.
    morpheme – A graphically-authorable animation engine by NaturalMotion
    Monumental Technology Suite – A MMOG platform, including server and cleint technology and development / live management tools.
    Multiverse Network – an MMOG platform, including server, client, and tools. (Free for development and use–revenue sharing upon commercial deployment).
    Odyssey Engine – Used to create three dimensional computer role-playing games, used in Star Wars: Knights of the Old Republic
    ORE – Online RPG Engine
    Quest3D – www.quest3d.com
    Power Render – A general purpose software development kit for games and 3D visualization
    RAGE – A game engine created by Rockstar Games use it to power their upcoming video games on the Xbox 360 and PlayStation 3
    Reality Engine – 3D game engine by Artificial Studios
    RelentENGINE – A next-generation FPS engine supporting massive destroyable city environments and realistic vehicle control, makes extensive use of shader model 3.
    RenderWare – A very popular 3D API and graphics rendering engine
    Retribution Engine – A game engine to make first person shooter games
    Revolution3D – A 3D graphics engine developed by X-Dream Project
    RPG Maker XP – A 2D engine to make top-down and isometric-style role-playing games for Windows.
    SAGE engine – Used to create real-time strategy games
    SCUMM engine – Used in LucasArts graphical adventure games
    Serious Engine – The engine by Croteam used in the epic Serious Sam: The First Encounter and the inspirational – The Second Encounter
    Shark 3D – A middleware from Spinor for computer, video games and realtime 3D applications
    Silent Storm engine – A turn-based strategy game engine
    Sith – A game engine developed by Lucasarts for Jedi Knight: Dark Forces II
    Slayer – A game engine created by The Collective, Inc. and used in Buffy the Vampire Slayer, Star Wars Episode III: Revenge of the Sith, Indiana Jones and the Emperor’s Tomb and Wrath Unleashed
    Source engine – A Game Engine developed by Valve Software for Half-Life 2
    Torque Game Engine – A modified version of a 3D computer game engine originally developed by Dynamix for the 2001 FPS Tribes 2
    Torque Game Engine Advanced – A next-generation 3D game engine support modern GPU hardware and shaders.
    TOSHI – A fourth generation cross platform game engine designed by Blue Tongue Entertainment
    Truevision3d – A 3D game engine using the DirectX API
    Unigine – Cross-platform middleware with great graphics
    Unity – An easy-to-use open-ended 3D game/interactive software engine
    Unreal engine – One of the most popular game engines for action games
    Vengeance engine – A video game engine based on the Unreal Engine 2/2.5
    Vicious Engine – Available for Microsoft Windows, Sony PlayStation 2, Microsoft Xbox, and Sony PlayStation Portable
    3DGame Studio – www.3dgamestudio.com
    Vision Game Engine – A commercial game engine used in 50+ titles by companies like T2, Atari, Neowiz and Threewave. Available for PC, Xbox, Xbox360 and PS3
    Visual3D.NET – 3D platform and visual development environment built upon Microsoft .NET 2.0 and XNA Framework for developing for PC, Xbox 360, and Windows Mobile devices using C#, Visual Basic, J#, C++.NET, JScript.NET, IronPython, and visual scripting.
    Virtools – A 3D engine combined with unique high-level development framework, used for game prototyping and rapid developments. Available for Windows, Macintosh, Xbox, PSP
    White Engine – Square-Enix’s proprietary seventh generation game engine to be used for their PS3 projects.
    zerodin engine – 一个MMORPG专用的商业引擎,用于PC,XBOX360等多个平台,目前为止最适合开发MMORPG的商业引擎,引擎前身用于著名的RF online.
    Zero – 3D game engine used in Star Wars: The Clone Wars, Star Wars: Battlefront, and Star Wars: Battlefront II
    Maz 3D Game Engine – Designed by Students C++ & OpenGL
    手机游戏引擎

    GledPlay – 一套完整的SDK用于开发手机游戏。
    game-editor – 为GP2X开发游戏的开发套件。
    PSP

    WGAF – Guild Software用于开发Vendetta Online的引擎。
    XnGine – 最早的实时3D引擎之一。
    游戏及其使用的引擎

    引擎 游戏 公司
    Nebula Device 3 黑暗之眼 Radon Labs
    GoldSrc 半条命 Valve
    SAGE 引擎 命令与征服;
    命令与征服3:泰伯利亚战争;
    魔戒:中土大战II  EA
    Source引擎 半条命2;
    Sin Episodes;
    魔法门之黑暗弥赛亚  Valve;
    Ritual Entertainment;
    Arkane Studios 
    CryENGINE 孤岛惊魂 Crytek
    CryENGINE2 孤岛危机;
    孤岛危机:弹头  Crytek
    Essence 引擎 英雄连;
    英雄连:对立前线  Relic Entertainment
    Scimitar 刺客信条 育碧公司
    zerodinengine RF oline;
    dark eden2  CCR,SOFTON(开发中),GRAVITY(开发中)
    Alamo 星球大战:帝国战争;
    星球大战:帝国战争-堕落之军;
    宇宙战争:地球突击战  Petroglyph
    Unreal Engine 3 虚幻竞技场3 Epic Games
    Doom 3 引擎 毁灭战士3;
    雷神之锤4;
    深入敌后:雷神战争  Id Software
    Neon 引擎 闪点行动2; 极速房车赛  Codemasters
    GFX3D 复活 (游戏)、天骄  目标软件公司

    引擎概览(A–G)

    本章节来自 游戏编程Wiki,版权依据GNU自由文档许可证 1.2

     

    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    3DCakeWalk Python Windows/Linux 商业 2D/3D 基于 DirectX和OpenGL     Python 参见
    A6游戏引擎 C-Script,模仿C++/Delphi Windows 商业 3D 基于 DirectX C-Script脚本语言 带物理运算
    AGL 引擎 C++ Windows 商业 2D 基于 DirectDraw,Direct3D和OpenGL 高级游戏场景框架 易于使用,硬件抽象,自动资源管理,自定义文件系统
    Allegro C++ DOS, Unix, Windows, BeOS, QNX, MacOS 开源,免费 2D以及3D  
    Artificial 引擎 .NET Windows 免费 3D 基于 DirectX
    Axiom .NET   免费 3D 基于 OpenGL
    Baja引擎 C++/Lua Windows, Mac Os X 免费 3D 基于 OpenGL Lua 专业级品质,包含各种开发工具 灵活性高
    Blitz3D Basic Windows 商业 2d/3D 基于 DirectX7 BlitzBasic 使用者众多 易于使用,支持BSP,3DS 非面向对象,basic语法
    BlitzMax Object Basic Windows, Linux, MacOS 商业 2D 基于 OpenGL BlitzMAX 脚本 提供多种模块(GUI,3D,音效,物理运算等)易于使用 高速2D引擎,面向对象,支持LUA 没有3D支持
    Brume Game引擎 .NET 2.0 (C#) Windows 免费 3D 基于 DirectX 提供多种模块(GUI,音效,物理运算,碰撞检测,动画等) 易于使用,面向对象  
    C4 引擎 C++ Windows/MacOS 商业 3D 可视化脚本编辑 参见 正在开发 特性支持不完整
    Cipher Game 引擎 C/C++ Windows 商业 3D   碰撞检测,AI
    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    ClanLib C++ Windows, Linux, MacOSX 开源免费 2D加速 网络系统表现优秀
    Classical Moon GDK C/C++ Windows Free/商业 2D 基于 OpenGL 是,基于 OpenAL 可定制化C/C++脚本语言 Chinese
    Clockwork(未完成) 不需要 Windows, Linux Indie/商业 3D 基于 OpenGL 基于 OpenAL 计划中 Lua
    CRM32Pro C++ Windows, Linux 闭源 LGPL 2D 基于 SDL/glSDL,优化MMX 基于SDL_mixer的API 基于SDL_Net的API XML解析器,自带文件打包管理器,参见 基于各种CPU的高级设定,可定制化配置系统
    Crystal Space C/C++ Linux, Windows, MacOS X 免费(LGPL) 3D 基于 OpenGL Python, Perl 或 Java
    DaBooda Turbo 引擎 VB Windows   2D 基于 DirectX
    Daimonin C(服务端),C++(客户端)java(编辑器) Linux, Windows, MacOSX GPL 2D/3D 基于 SDL及OGRE3D Lua 完整的MMORPG引擎
    Delta3D C++ Linux, Windows, MacOSX 免费(LGPL) 3D OpenGL Python 物理运算,场景编辑器,参见 支持大规模地形渲染。
    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    DarkbasicPro Basic Windows 共享软件 2d/3D 基于 DirectX9 Darkbasic 用户众多 易于使用,支持BSP,3DS。 非面向对象,basic语法
    DizzyAGE C++ Windows 免费 2D 基于 DirectX GS9 脚本语言 有开发工具,用于快速创建冒险类游戏
    DXGame引擎 VB6 Windows 免费 2D+ 基于 Direct3D 自动精灵管理,2D贴图地图(层数无限),基本粒子系统,碰撞检测
    dx_lib32 2.0 VB 6.0 (亦有 VB.NET) Windows 免费 2D 基于 D3D8) 基于 DirectAudio (DSound8) 支持Quake/Half-Life的打包文件格式 界面简单,易于使用,说明文档完备 不完全面向对象,说明文件及网站都是西班牙语
    EasyWay 引擎 Java Windows, Linux, Mac OS 开源GPL 2D/3D 基于 OpenGL OpenAL 计划中 可扩展,像素级碰撞检测,自动寻路 使用简便 API说明文件不完善
    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    Epee 引擎 C++ Windows, Linux,Mac zlib/libpng 2D基于SDL,3D计划使用OpenGL 计划中 计划中 Epee 参见 渲染快速 引擎还在开发中
    ephLib C++/Io OS X GPL/其他 2D/3D 基于 OpenGL OpenAL 完整Io脚本支持 高级粒子系统 可修改 开发中,特性不完整
    Espresso3D Java Windows, Linux, MacOS X 免费/商业 3D 基于 LWJGL 2D/3D 基于 OpenAL 参见
    Fenix Project (beta) Pascal、C兼有 Windows, Linux, Mac OS, Solaris, BeOs, DreamCast, GP32X 开源 2D 基于 SDL 基于 MikMod 基于 SDL_Net 像素级碰撞检测,自动寻路 易于使用 基于软件渲染的2D,非面向对象的脚本语言,漏洞少
    FIFE C++ Win32, Linux, MacOS X, BSD 免费(GPL 2.0) 2D软件渲染,基于SDL, 有硬件加速模式,基于OpenGL 是 (OpenAL) Lua 5.1 计划支持各种特效   还不完整
    FlatRedBall 2.5D .NET Windows Free 3D 基于 DirectX Soon 模板,碰撞检测,骨骼系统,物理运算
    G3D C++ Linux, Windows, MacOS X 免费(BSD) 3D 基于 OpenGL  
    G3DRuby Ruby Windows, Linux Free 3D 基于 OpenGL  
    Game Maker Delphi Windows 免费/商业 2D/3D Some 自创GML脚本 快速2D贴图地图游戏开发,但支持3D速度不够(基于DirectX)
    Genesis3D C++ Windows 免费/商业 3D基于DirectX
    GFX3D C++ windows 商业

    引擎概览(G–Q)

    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    GhostEngine C++, .NET Windows (Mac和Linux在开发中) 引擎代码使用Zlib/libPNG许可证,非代码资源使用多种许可否 3D 基于OpenGL/DirectX,对DirectX还在开发 是 (FMOD) 是 (TCP/IP正在重写,UDP支持在计划中) Lua 普通   开发中
    Goblin 2D+ C/C++ Windows 免费,共享,商业 主要是基于D3D的2D,但支持.X和.MD2模型 是-自创   开发中  
    Golden T 游戏引擎 Java Windows, Linux, MacOS X 免费 2D基于OpenGL  
    Gosu C++, Ruby Windows, Mac, Linux 免费 2D基于OpenGL/DirectX
    HGE HGE C++ Windows 开源(Zlib/libpng许可证) 2D基于DirectX 是,基于BASS 带开发工具 引擎框架好  
    Irmo C Linux 免费     Ruby  
    Irrlicht C++/.NET Windows, Linux, Mac OSX 免费 (zlib/pnglib许可证) 3D 基于DirectX(8,9),OpenGL,多种软件渲染 Lua 碰撞检测,HDR 大公司开发,教学资源丰富 开发中
    ika C++ Windows, Linux 免费(GPL) 2D 基于OpenGL Python 资源消耗少
    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    Jad 引擎- C#+MDX引擎 C# Windows LGPL 3D基于Managed DirectX MDSound和Vorbis .NET 需要支持shaders 2.0以上的图形卡,使用牛顿力学引擎来实现逼真的运动和力回馈,支持HDR,带AI引擎(遗传算法框架) 开发界面直观 开发文档不完整
    Jamagic 1.2 Jamascript Windows 商业 3D 嵌入式编辑器 易学  
    JEngine SSE C++ Windows, Linux 免费(GPL) 2D基于OpenGL Lua 碰撞检测,Cg&GLS效果
    Jet3D C/C++ Windows Free 3D基于DirectX      
    JGame Java Windows, Unix, MacOSX 免费(BSD) 2D  
    jMonkey引擎 Java Windows, Linux, MacOS X 免费(BSD) 3D 基于LWJGL 未知
    JOGRE引擎 Java Windows, Linux, MacOS X 免费(BSD) 2D  ? Java在线游戏引擎
    Multimedia Fusion 2 非脚本 Windows 商业 2D Lua ActiveX, Dll, 插件丰富,可扩展 易学  
    neabEngine PHP Windows, Linux 商业 2D (AJAX) 带完整源代码,可添加模块
    NeL C/C++ Windows, Linux 免费/商业 3D 基于DirectX或OpenGL   CEGUI集成
    NemoX 3D 引擎 VB/Delphi/.NET Windows 免费 3D 基于DirectX DirectX 易于使用  
    NeoEngine C++ Windows, Linux 免费(MPL) 3D 基于 DirectX或OpenGL Lua  
    OGE – Open Game Engine C++ Windows (mingw, VC), Linux (gcc) 免费(LGPL)/商业 3D(OGRE,hence DX + OpenGL) OpenAL RakNet Squirrel 多线程设计,GUI(CEGUI)物理系统(ODE) 简便的开发平台  
    OGRE C++ Windows, Linux, MacOS X 免费(LGPL)/商业 3D 基于Directx或OpenGL 几乎支持所有高端3D技术 大公司开发,教程丰富,开源 源代码庞大
    ORE VB6 Windows 免费 2D基于 DirectX7/DirectX8
    名称 程序语言 平台 版权 图像 音效 联网 脚本 其他特性 插件 备注
    Ovorp引擎 .NET Windows 免费 2D基于DirectX  
    PAB游戏引擎 VB Windows
    Panda3D C++ Windows, Linux 免费(BSD) 3D DirectX / OpenGL 是,基于FMOD、OpenAL、Miles Python(官方建議)、C++ 內建碰撞與ODE物理引擎,有效能監控等輔助程式
    Photon C++ Linux, Windows zlib 2D 基于OpenGL 是,OpenAL 带资源管理 文档丰富 开发早
    PLib
    展开全文
  • 十大最牛游戏引擎

    万次阅读 2016-06-07 11:54:07
    游戏引擎就像是游戏的发动机,好的游戏引擎能够让游戏开发事半功倍。而对玩家们来说,游戏引擎能够带来最直观的感受就是游戏的画面和细节表现。从光影声效到场景细节,从画面触感到各种细腻体验,再到人物表情的捕捉...

    游戏引擎就像是游戏的发动机,好的游戏引擎能够让游戏开发事半功倍。而对玩家们来说,游戏引擎能够带来最直观的感受就是游戏的画面和细节表现。从光影声效到场景细节,从画面触感到各种细腻体验,再到人物表情的捕捉,花草树木的美感等等。

    毫无疑问,从业界各类大作真正进入3D时代开始,一款成功的游戏引擎,就从诸多方面展现出了其对作品整体质量不可估量的影响。

    今天就为大家盘点一番:十大著名游戏引擎。

    10、RAGE Engine

    代表作:《GTA4》,《荒野大镖客》

    作为资深游戏玩家,突然提到RAGE Engine,恐怕许多朋友显得不那么熟悉。

    不过,如果笔者提到“狂暴引擎”这个更加清晰的概念,相信知道的人就不少了。

    没错,狂暴引擎最著名的代表,就是《GTA4》和《荒野大镖客》这两部力作。

    除了虚幻4还谁有?十大最牛游戏引擎

    RAGE引擎的扩展用途很多。它的能力主要体现在:世界地图流缓冲技术、复杂人工智能管理、天气特效、快速网络代码与众多游戏方式,这些在GTA4中都表现的很明显。

    更重要的是,这款引擎对游戏中的许多“合作插件”本身有着极好的兼容性。这个特点,也是如今我们还能在大作中好好回味其品质的重要原因。

    9、Naughty Dog Game Engine(顽皮狗)

    代表作:《神秘海域》系列

    好的,笔者可以很安全的说,对这款引擎而言,喜欢独占游戏的玩家应该不陌生。

    作为世界上最著名,也是最有特点的独占游戏引擎,顽皮狗在PS平台上的表现无疑令许多玩家印象深刻。

    09年的E3大展,无疑是一次划时代的展会。为什么?因为这次展会是顽皮狗引擎首次在世界面前展现它的强大效果。

    除了虚幻4还谁有?十大最牛游戏引擎

    和其他游戏引擎——只在某个具体环节上表现出色不同的是,顽皮狗在主机平台上的强大,是全方位的。

    惊人的动态画面效果,流畅细腻的人物建模,堪称壮丽的音效和光照模式,好莱坞大片般的过场动画,再加上绚丽丰富的画面色彩。

    有了以上这些要素,我们完全可以把顽皮狗——称为真正意义上的次世代全能引擎。

    8、The Dead Engine(死亡引擎)

    代表作:《死亡空间》

    和以上两个重要引擎相比,业界另一经典当属——死亡引擎。

    很有意思的是,从游戏引擎本身的特点出发,死亡引擎的说法并不是来源于某个官方定论,而是由各大媒体和玩家们总结出来的。

    除了虚幻4还谁有?十大最牛游戏引擎

    同样的,《死亡空间》被媒体誉为史上最恐怖的游戏之一,对制作小组而言,这样的评价结果,显然非常符合其开发文化。

    作为EA固有的老牌制作组,开发人员们曾不止一次的宣布,这个小组的最大特点就是——专注于创造惊悚动作游戏。

    至于整个死亡引擎最特殊,也最有优势的地方,莫过于其本身超强的游戏操作性,逼真的音效特色,以及非常人性化的光照执行效果。

    值得注意的是,上述几个重要特点,恰好完美契合了一款优秀恐怖流游戏所需要的特质。

    这么看来,《死亡空间》的巨大成功,也就不稀奇了。

    考虑到在《死亡空间》正式开发之前,开发组特意对原有引擎进行了彻底重制,我们不能不给工作人员的良苦用心打上100分。

    7、Cry ENGINE(尖叫引擎)

    代表作:《孤岛危机》系列

    在系统的谈论和分析Cry ENGINE之前,作为玩家的我们,必须首先明确一个基本概念:

    每一款出色的游戏引擎,其本身都不是一个孤立的概念,它要么能够和其他引擎发生一些重要联系,要么,其背后有一个出色——或者至少曾经很出色的开发商。

    除了虚幻4还谁有?十大最牛游戏引擎

    显然,曾经因为《孤岛危机》系列,而在业界引发强烈反响的“尖叫引擎”属于后者。

    这个开发商,就是曾经名噪一时,后来又因为传说中的“显卡危机”濒临破产的Crytek。

    Crytek是一家欧洲开发商,它的辉煌起点,还要追溯到04年《孤岛惊魂》的问世。

    在全世界都期待着全新的次世代游戏会给玩家们带来怎样的体验时,Crytek用标准的FPS游戏将所有人拍飞。

    当然,之后的故事,我们都非常清楚,《孤岛惊魂》的名声由此打响,其名声中最重要的根源——有且只有一条:硬件杀手。

    没错,时至今日,这个系列依旧是业界最有名的硬件杀手。

    “尖叫系列”的集大成展现,莫过于Cry3,Cry3引擎是第一款——集360、PS3、多人在线游戏、DX9、DX10于一体的次世代游戏开发解决方案,使用的是弹性计算与图像处理。

    与其他引擎不同,Cry3不需要第三方插件,自身就可以支持物理、声音还有动画,以及制作出业界顶级的画面。

    6、Avalanche Engine(雪崩引擎)

    代表作:《正当防卫》系列

    好的,让我们实际一些:除了纵横本年度E3大展,毫无保留展现全貌的《辐射4》之外,哪部作品才是E3上最有特点的游戏呢?

    在这里,笔者必须给《正当防卫3》投上一票。

    除了虚幻4还谁有?十大最牛游戏引擎

    事实上,不止是《正当防卫3》本身,这个系列从诞生以来,就具备了许多同类游戏不具备的优秀特质。

    这一切都源于其背后伟大的游戏引擎——Avalanche Engine(雪崩引擎)。

    需要指出的是,在一代的时候,雪崩引擎并不是一个完全规范化的引擎,在这样的基础上,第一代JC的表现只能说是好坏参半。

    幸运的是,很多时候我们相信,Avalanche Studios制作组并没有原地踏步,他们花费了无数心血,从各方面将“雪崩一代”进行了深层次的剥离、优化和改良。

    于是,传奇般的“雪崩二代”应运而生。多种游戏模式的完美融合,大量的屏间爆炸与战斗,新物理特效下的抓钩特性,更强的人工智能,强大到令人发指的血性效果。

    正因为“雪崩二代”在引擎细节上的出色发挥,让玩家们对《正当防卫2》甚至后来在E3上亮相的《正当防卫3》都有了更多的期待。

    讽刺的是,“尖叫引擎”的辉煌,从“要求显卡”开始,却也因为“显卡危机”渐渐衰退,不能不说,这是一种循环。

    5、Anvil Engine(铁砧引擎)

    代表作:《刺客信条》和《波斯王子4》

    说起来,育碧是我个人很佩服的一个公司,同样也是一个相当有趣的公司。至少在引擎这部分的表现上大致如此。

    为什么这么说呢?这一切都要从《刺客信条》说起。

    作为史上最成功的原创模式作品之一,笔者可以很坦然的告诉大家,正是《刺客信条》的出现让我们真正认识了Anvil Engine这个优秀的引擎。

    除了虚幻4还谁有?十大最牛游戏引擎

    虽说我们口中“有趣的育碧”也常常使用其他引擎制作相关的游戏,但要说到对自家引擎的忠实,恐怕没有什么引擎能和Anvil Engine相比了。

    在刺客信条和波斯王子中,Anvil引擎使得动态效果和环境的互动非常的柔和优雅。并且该引擎很善于在游戏世界中填充AI。

    有意思的是,在“铁砧二代”的整体构架中,育碧有了更多细节上的优化尝试。

    诸如光照、反射、动态画布、增强型AI、与环境的互动、更远距离的图像绘制、昼夜循环机制等一系列要素。

    很显然,目前的Anvil Engine正在变成——最全面的游戏引擎之一。

    尽管本年度的《刺客信条:枭雄》依旧有着这样那样的Bug,不过在正式推出之时,育碧对引擎的改进和润色还是值得期待的。

    4、IW Engine

    代表作品:《使命召唤》系列

    提到IW Engine,我们可以先确定一件事情,以IW Engine为核心的《使命召唤》系列,依旧是史上平台总销量最多的游戏之一。

    所谓IW,指的是Infinity Ward,对许多玩家来说,虽然《使命召唤》系列早已成为年作,不过IW引擎的那些特点至今仍然相当鲜明。

    除了虚幻4还谁有?十大最牛游戏引擎

    非凡的动态效果,简单直白的细节处理,复杂的AI模式,创造性的动态子弹穿透系统,加上令人叹为观止的音效和极好的网络模式体验。再加上独到的纹理缓冲技术。

    以上无论哪一项,最终都能完美契合一款经典FPS游戏所需要的全部特质。

    也难怪在《黑色行动3》发布的时候,开发人员会在采访中强调:

    “这么多年来,其实我们一直都在享受IW带来的成果,并不断的完善它,它是我们一切变革和荣耀的基础。”

    3、Frostbite Engine(寒霜引擎)

    代表作:《荣誉勋章》和《战地》

    早在《使命召唤》系列出现之前,《荣誉勋章》曾经是最好的FPS游戏之一,不得不说,这里面有寒霜引擎很大一份功劳。

    除了虚幻4还谁有?十大最牛游戏引擎

    当然,一定要追溯源起的话,我们会发现,早期的寒霜引擎其实是为DICE旗下产品《战地:叛逆连队》量身定做的,其基础特性均迎合了《战地:叛逆连队》的特点。

    真正值得注意的,是这个引擎的特色。无论是寒霜模式,还是后来的“寒霜2.0”,这款引擎最大,最深入的开发特点,就是它在游戏设计中的人性化体验。

    除了虚幻4还谁有?十大最牛游戏引擎

    游戏制作者可以在工具中进行简便的图形化操作,不同格式的文件的导出和导入工作也可以在工具中自动完成。工具提供丰富的实时生成和调节内容。

    同时,此种引擎还有效提供了许多高精细度的展现方式和细节捕捉体验,这也是同时期其他引擎难以企及的部分。

    2、Unreal Engine(虚幻引擎)

    代表作:《战争机器》系列,《质量效应》系列

    Unreal Engine,大名鼎鼎的“虚幻引擎”。好的,虚幻引擎到底多有名呢?

    从《战争机器》到《质量效应》再到《无主之地》这一系列大作,甚至是《镜之边缘》这种“我们所期待的是做出精品”的游戏。

    可以大胆的说一句,自从1998年初正式诞生至今,伟大的虚幻引擎不断发展着,时至今日,虚幻引擎已经成为整个游戏业界——运用范围最广,整体运用程度最高,次世代画面标准最高的一款引擎。

    除了虚幻4还谁有?十大最牛游戏引擎

    恐怕再也没有一款引擎能像“虚幻系列”这样发展。在游戏整体细节的把握和大场景构建的丰富程度上,不客气的说,虚幻引擎已经做到了次世代单机大作们所能达到的最高水平。

    要知道,就连向来被玩家们认为“习惯炒冷饭”的仙剑之父姚老师,如今都敢喊出“只要仙剑能卖出若干套,我就换虚幻3”。

    你们看,这才只是虚幻3。现在,已经到了虚幻4都磨刀霍霍的时刻了。

    1、Creation引擎

    代表作:《上古卷轴5:天际》和《辐射4》

    说到本年度最热门的游戏,《辐射4》自然是不遑多让。不过,对笔者来说,《辐射4》的横空出世,也让我们终于开始思考一个问题:

    Creation究竟是怎样一款引擎?它最终又会走向何方呢?

    坦率的说,这个问题并不复杂,早在本年度E3大展,《辐射4》因为各方面细节展示而大出风头的时候,这个问题就已经被摆到了台面上。

    除了虚幻4还谁有?十大最牛游戏引擎

    说到Creation,我们不可避免会提到两个概念:Gamebryo引擎和id Tech 5引擎。

    一般认为,在《辐射3》和《文明4》中被作为核心引擎使用的Gamebryo,正是如今Creation的前身。

    相比之下,id Tech 5则是一种相对前卫的产物。这个引擎完全改变了每个物件单独贴图的模式,而是将整个世界打造成一个更加完备的整体。

    另一方面,其本身的远景绘制水平相当惊人,基本能做到所有贴图毫不雷同。

    大家发现什么端倪了吗?没错,这种特点对《辐射》这类以废土世界观为基础构建的游戏,可谓非常重要。

    明白了这一点,我们再来看看Creation引擎。笔者认为,现在的Creation可以说是id Tech 5的优化和改良。

    这种改良主要体现在贴图模式的优化和压缩上,同时又没有失去游戏的逼真细节和景深效果,同时还解决了游戏容量太大的问题。

    除了以上特点之外,Creation在光影效果的把握上也极为出色,它的存在,使得《辐射4》的光影细节几乎完全贴近真实。

    同时,该引擎对MOD体系和自定义装备方面的支持也表现的相当优秀,甚至还通过插件改善了NPC固有的AI效果,使得对话和交流更加顺畅自然。

    笔者觉得,上述一系列“细微优势”的持续累积,才是B社敢于拍胸脯保证《辐射4》整体质量的根源所在。

    展开全文
  • 主流游戏引擎大全

    千次阅读 2012-09-23 16:44:59
    本文作者访问了在各类游戏引擎背后默默无闻的创作者,最值得注意的是在这些对话中他们对彼此的态度和看法。尽管在某些技术之间存在着竞争关系——Unreal Engine 3,id Tech 5,CryENGINE 2,或许还有Source,...
  • 如何学习一款游戏引擎

    万次阅读 2016-12-19 16:50:26
    市面上的引擎应用的最广的无非是Cocos2D引擎和Unity3D引擎以及虚幻4引擎,当然还有许多开源的引擎,面对这么多的引擎,读者该如何学习?笔者就以自己工作十多年的经验给读者分享一下,因为人与人是不同的,所以我...
  • 一个小小的C++游戏引擎

    千次阅读 2018-06-14 23:52:08
    你为什么想要写一个游戏引擎?可能有很多原因:你是个修理工,喜欢从头开始建立系统,直到系统完成。关于游戏开发你想了解更多。你在游戏行业工作了多年,现在仍然在不停的琢磨。你甚至不确定自己是否可以从头开始.....
  • 十大游戏开发引擎优缺点对比

    万次阅读 多人点赞 2017-05-31 15:06:50
    现在,手游、页游等新兴平台的表现又非常强势,所以选择正确的游戏引擎变得尤为重要。下面,小编就给大家带来开发商常用的10款游戏引擎,并且逐一分析其优缺点,未来想涉足游戏领域的朋友一定要看看。
  • 游戏引擎”顾名思义,就是指一款游戏的“引擎”。(好吧,我知道这句话是废话......) 让小编给大家举一个更加形象的例子:大家不妨联想一下汽车引擎。 汽车之所有能产生动力,在马路上行走,就是因为它的内部...
  • 十大开源游戏引擎深入比较

    万次阅读 2017-06-22 20:05:42
    在国内外,业界盛传有十大开源游戏引擎,分别是OGRE、Irrlicht、Panda3D、Crystal Space、jME、Blender Game Engine、Reality Factory、The Nebula Device 2、RealmForge、OpenScene- Graph。我们对这十款开源游戏...
  • Android游戏引擎汇总

    万次阅读 2016-11-22 17:07:05
    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要。而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎。然而就目前为止游戏引擎的数量已经非常之多,每...
  • android游戏引擎汇总

    千次阅读 2017-08-28 21:43:55
    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要。而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎。然而就目前为止游戏引擎的数量已经非常之多,每...
  • 对于像学习游戏引擎原理的人来说,需要制定自己明确的长期目标:  1) 首先,一开始可能对游戏引擎没什么概念,建议先使用一两个游戏引擎(我推荐C++程序员学习虚幻4游戏引擎,现在是免费开源的,非常值得学习。...
  •  文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057作者:毛星云(浅墨) 邮箱: happylifemxy@163.com 看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把...
  • 毕竟网络上的游戏引擎良莠不齐,官网上相关资料也比较少,而选择一个适合的游戏引擎是一个项目最基础,也是很核心的一部分。 试想一下,在游戏开发进行到中后期的时候,才发现项目引入的游戏引擎与需求相悖,这时候...
  • 游戏引擎的发展历程

    千次阅读 2013-12-18 09:56:47
    大多数人给出的解释都是基于engine的英文翻译,将游戏引擎等同于汽车中的引擎(发动机),再好一些的解释成动力,这些解释都对,但是动力只说并不全面,不能完整反映出游戏引擎在游戏中的作用与地位。 ...
  • 为何要学习游戏引擎底层技术

    千次阅读 2017-01-18 16:58:58
    已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 最近这段时间,开始写一些关于3D游戏引擎底层实现的文章并附上源代码,目的是唤起开发者学习引擎底层的...
  • 游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实、吸引人眼球。游戏引擎负责其余的事情。早期,游戏开发者通常从草图做起,花费高昂,且不容易获利。为了让游戏开发更加简单容易,主要的开发者开始授权...
  • 四大开源3d游戏引擎探究

    千次阅读 2015-10-14 12:32:13
    本人水平有限,只对于长久以来研究的几个经典3d游戏引擎的设计思想、程序架构和应用行深入剖析的结果与游戏开发同行分享,文档有不妥之处请指出,期待我们的共同进步。引擎名称:1. orge(鬼怪)2. Irrlicht(鬼火)...
1 2 3 4 5 ... 20
收藏数 142,711
精华内容 57,084
关键字:

游戏引擎