1. 3D游戏引擎简史
在游戏开发中,从一开始就确定正确的开发平台非常重要。 你们的游戏支持 Windows、Linux 和 OS X 吗? 你的游戏开发只使用OpenGL就足够了吗? OpenGL 设计于 20 世纪 90 年代初游戏策划,最初运行在价格约为 25,000 美元的 Unix CAD 工作站上。 后来被移植到Windows和其他低端平台。 与此同时,随着游戏行业的发展,图形加速器的价格从 2,000 美元暴跌至今天的大众市场价格 150 美元左右。
确实,很多人都会引用1996年使用OpenGL成功开发的革命性游戏Quake作为上述快速发展现象的直接原因。 然而,成功的 Quake 级游戏开发标准还需要更多:世界一流的音频支持、网络连接、用户输入设备支持和实时管理功能。 既要实现跨平台支持,又要实现精彩的游戏效果。 要实现这样的解决方案,最好建立一个像样的游戏开发网站。
2. 适用于C++、Java等开发语言的简单DirectMedia层
是的,历史很有趣,但并不是每个游戏都必须是《雷神之锤》的克隆版。 被业界许多人吹捧为具有许多优点的选项是简单直接媒体层 (SDML)。 这是一个跨平台多媒体库,提供对音频、键盘、鼠标、操纵杆、OpenGL 和 2D 视频帧缓冲区的低级访问。 SDML 支持我能想到的几乎所有平台,包括 Linux、Windows、所有 MacOS 变体、WinCE、Dreamcast 和一些其他操作系统。 它被广泛用于开发 MPEG 播放器、硬件模拟器和许多流行游戏,包括在 Linux 平台上运行的屡获殊荣的《文明:权力召唤》。
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“隧道.h”
//SDL相关变量定义
SDL_Surface *屏幕,*bBuffer,*图像;
SDL_Rect rScreen,rBuffer;
int main (int argc, char **argv)
int flag = SDL_SWSURFACE;//请求软件表面。
//软件表面位于系统内存中,
// 一般不如硬件表面速度快
#ifdef WIN32
int fullscreen = MessageBox(NULL, "显示全屏 (y/n):", "屏幕设置", MB_YESNO);
如果(全屏==IDYES){
标志 |= SDL_FULLSCREEN; // 如果用户需要的话接管整个屏幕
#万一
Tunnel_Timer(); // 读取起始系统时钟值
SDL_Init( SDL_INIT_VIDEO ); // 初始化视频子系统
//设置屏幕为320x240,32位颜色
屏幕 = SDL_SetVideoMode( 320, 240, 32, 标志);
// 请求屏幕表面的硬件缓冲(如果可用)
bBuffer = SDL_CreateRGBSurface( SDL_HWSURFACE, 屏幕->w, 屏幕->h, 屏幕->格式->BitsPerPixel,
屏幕->格式->Rmask3D交通工具,
屏幕->格式->Gmask,
屏幕->格式->Bmask,
屏幕->格式->Amask);
// 这是种子图像,一旦启动,它将呈螺旋状
Image = SDL_LoadBMP("tunnel_map.bmp");
图像 = SDL_ConvertSurface(图像, 屏幕->格式, 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 );
隧道.Set( 320, 240 ); // 通道将填充整个缓冲区
隧道.Precalc(16); //内圆直径
while (SDL_PollEvent(NULL)==0) {
浮动 fTime = Tunnel_GetTime();
//修改之前必须锁定表面独立开发游戏引擎,特别是当缓冲区位于图形硬件内存中时
SDL_LockSurface(bBuffer);
SDL_LockSurface(图像);
Tunnel.Draw(bBuffer, 图像, 180*sin(fTime), fTime*100);
SDL_UnlockSurface(bBuffer); // 更新后即可解锁
SDL_UnlockSurface(图像);
// 将缓冲区中的数据输出到屏幕绘图区域并强制重绘
SDL_BlitSurface( bBuffer, NULL, screen, &rBuffer );
SDL_UpdateRect(屏幕, 0, 0, 0, 0);
隧道.Free();
图 2. 展示旋转和扭曲的 2D 通道
4.其他游戏引擎的探索
我们来看看其他一些开源游戏引擎。
a) ALLEGRO(Allegro底层游戏开发例程)
Allegro 是一个开源、可移植的库,主要针对视频游戏和多媒体编程。 Allegro 由 Shawn Hargreaves(最近称为 Climax)创建,现已发展成为能够跨越许多操作系统(例如 Linux、Windows、MacOS、MS-DOS 和许多其他流行平台)的游戏系统。
除了拥有先进的 2D 图形库之外,它还可以轻松访问鼠标、键盘、操纵杆和高精度定时器中断。 Allegro 不会包装或取代 OpenGL,但通过访问其广泛的开发站点 (),您可以了解如何将 OpenGL 集成到 Allegro 游戏程序中。
Allegro 发布了大约 700 个不同的游戏项目,其中最突出的两个类别是街机游戏和益智游戏。 我特别喜欢经典街机游戏 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 屏幕截图
发表于@ 二月 22, 2006 12:05 PM |
文章来源:https://blog.csdn.net/skyremember/archive/2008/09/17/3172788.aspx