游戏编程
工程师WWW
R
展开
-
一种高性能网络游戏服务器架构设计
网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制。客户端与服务器通过网络数据包交互完成每一步游戏逻辑,由于游戏逻辑是由服务器负责处理的,要保证面对海量用户登录时,游戏具有良好的流畅性和用户体验,优秀的服务器架构起到了关键的作用。 1 服务器架构设计原创 2015-04-28 20:39:22 · 3228 阅读 · 0 评论 -
OGRE手札-39 碰撞检测
Ogre采用树桩管理场景中的各种"元素"(摄像机、灯光、物体等),所有的东西都挂在"树"上,不在"树"上的东西不会被渲染。Ogre::SceneManager就是"树"的管理者,Ogre::SceneNode是从SceneManager中创建的(当然BSP和8*树的管理也和这两个类有关,这暂时不讨论)。AABB(轴对齐包围盒)这个东西是碰撞检测的基础,和它类似的还有OBB(有向原创 2011-12-28 11:30:38 · 2235 阅读 · 0 评论 -
Ogre学习记录
1: 设计初衷它设计初衷是完全跨平台的。抽象的接口隐藏了平台相关的细节。它设计初衷是大幅度支持扩展的。支持多种场景类型,独立出平台和3D接口限制。2: 基本类结构关系Roo:对象为一切的入口,它负责创建Ogre的所有基础元素,三大基础元素大致包括:场景管理器,绘制系统,资源管理器。场景管理器:场景节点,动态对象。资源管理器:资源组管理,资源管理原创 2012-01-13 17:44:55 · 1812 阅读 · 0 评论 -
OGRE On iPhone ----Ogre的iPhone基础模版框架源代码分
当想要在iPhone上使用某个3D引擎的时候,感觉我这水平,自己写好像还不现实,学到自己能写都不知道要到何年何月了,于是折腾过没有官方支持但是比较简单而且我比较熟悉的Irrlicht。虽然的确成功了(见我原来的文章),但是弄2D游戏的时候,(用其他引擎)经历过一些痛苦的事情后,我发现强大,成熟的引擎,以及官方的支持是多么重要。。。。。于是,虽然Ogre的效率在 iPhone上还有些难以承受,但原创 2012-06-18 16:42:12 · 2385 阅读 · 0 评论 -
OGRE Coding Standards
This document describes the coding standards all developers are expected to adhere to when writing code for the OGRE project.Top-level organisation issuesAll source files must begin with the s原创 2012-08-24 18:10:36 · 1218 阅读 · 0 评论 -
Ogre内存池的使用和说明
大家可能会遇到一些Ogre中的内存分配的方面问题,我对这个总结了一下内存分配的方面资料。Ogre在1.7版本后,统一了内存分配策略,提供了内存是否泄漏的跟踪和内存池等比较方便开发的一些策略,目前提供了四种内存分配OGRE_MEMORY_ALLOCATOR 方式: #define OGRE_MEMORY_ALLOCATOR_STD 1 #defi原创 2013-04-13 23:56:01 · 1632 阅读 · 0 评论 -
OGRE 内存管理
Ogre引擎中与内存管理相关的文件大致有以下几个(只列出头文件)OgreAlignedAllocator.hOgreMemoryAllocatedObject.hOgreMemoryAllocatorConfig.hOgreMemoryNedAlloc.hOgreMemoryNedPooling.hOgreMemoryStdAlloc.hOg原创 2013-04-14 00:06:45 · 1775 阅读 · 0 评论 -
Lua 中实现面向对象
这里提供 Lua 中实现 OO 的一种方案:local _class={} function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={} do local cre原创 2014-04-18 16:34:15 · 1459 阅读 · 3 评论 -
LUA基础: TABLE, ARRAY, NAMESPACE, LUA的面向对象
table的声明及赋值table是Lua中的hashmap(包括其实现方式也是). 由于其包含所有数组的功能, 所以可以认为table是扩展了的数组. Lua没有再额外提供单独的数组类型.用以下的语句声明一个空的table:newTable = {}可以用以下的方式向table中添加值:newTable[2] = "14"可以使用字符串形式的key值原创 2013-12-02 17:14:57 · 1706 阅读 · 0 评论 -
跨语言通信方案比较
常用的跨语言通信方案:基于SOAP消息格式的WebService基于JSON消息格式的RESTful 服务以上两种方案的弊端:XML体积太大,解析性能极差JSON体积相对较小,解析相对较快,但表达能力较弱于是探索一下现在比较流行的跨语言通信方案:Google protobuf (http://code.google.com/p/protobuf)Apache原创 2014-03-27 15:00:33 · 3723 阅读 · 0 评论 -
LUA与C++交互第一篇
到公司已经两个周了,学习Lua已经开始在项目中使用,但是由于使用的lua函数基本上都是公司在上面进行了一次封装的,没有源代码对两种语言的交互详情还是不甚了解。如:如果向LUA注册一个对象给LUA使用,如何调用LUA中函数这些在公司的SDK看来就是一个简单的RegisterObject对象的几个属性进行填写就行了。 今天主要是对在Lua中如何调用C++函数和在C++中如何调用Lua函数原创 2014-03-05 15:02:03 · 1386 阅读 · 0 评论 -
C++调用Lua API接口
3这个部分描述了 Lua 的 C API ,也就是宿主程序跟 Lua 通讯用的一组 C 函数。所有的 API 函数按相关的类型以及常量都声明在头文件lua.h 中。虽然我们说的是“函数”,但一部分简单的 API 是以宏的形式提供的。所有的这些宏都只使用它们的参数一次(除了第一个参数,也就是 lua 状态机),因此你不需担心这些宏的展开会引起一些副作用。在所有的 C 库中,L原创 2014-03-05 14:59:35 · 2873 阅读 · 0 评论 -
lua非全局函数
我们知道,Lua的函数不仅可以存储在全局的变量中,还可以存储在局部变量或者table的字段中(大部分的Lua库都采用了此种机制, 例如io.read,math.sin).若要在Lua创建此种局部函数,有方法如下:方法1:使用常规的函数语法与table语法相结合来创建局部函数:1Lib = {}2原创 2014-03-03 11:16:43 · 2001 阅读 · 0 评论 -
Lua中ipairs()和pairs()的区别与使用
关于ipairs()和pairs(),Lua官方手册是这样说明的:pairs (t)If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.Otherwise, returns three values: the原创 2013-11-29 14:36:42 · 4514 阅读 · 0 评论 -
从CEGUI源码看代码规范
CEGUI(Crazy Eddie’s GUI)是一个使用C++实现的基于LGPL协议的的开源GUI库,主要应用于游戏界面。连著名的开源游戏引擎Orge3D也放弃了自己的界面引擎而使用第三方的开源界面引擎CEGUI。对于开源的代码工程,我首先会观察它的代码规范。比如,使用什么命名法,是否使用异常等等,这很有用。看不同的开源工程,可以看到各种不同的代码规范,其中有很多是值得借鉴的。代原创 2013-03-12 17:53:42 · 1975 阅读 · 0 评论 -
OGRE+Physx赛车游戏开发
最近在用OGRE+NXOGRE(一个结合AGEIA PHYSX 和OGRE的物理引擎)做赛车游戏,网上查不到什么中文资料,于是转载这篇,希望对自己和他人有所帮助.游戏主要用到了几个引擎,物理引擎(PhysicsX SDK 2.3.2,即NovedeX的新版本),图形渲染引擎(OGRE 1.2.0,包括人机界面的CEGUI部分),声音引擎(Direct Sound),网络引擎(RakNe原创 2011-12-23 09:36:20 · 2652 阅读 · 1 评论 -
Ogre的官僚主义批判
Ogre的Manager真是多啊,就象个官僚公司,干事的没几个,一堆的Manager,个个丫还都是Singleton.说自己是Singleton却又public构造函数,让人来new它.在第1次被new的时候,偷偷地将this赋给静态成员ms_Singleton,第2次new它就要assert喊冤了,当然这都是叫Singleton的模板基类的那个构造函数干的(典型的小人行径,见不得光).Manag原创 2011-12-18 22:53:06 · 1883 阅读 · 0 评论 -
页游服务器压力测试方案
目的: 为保证单个服务器的在线玩家数量,在项目的初期,应该通过压力测试来预测在线玩家的上限! 工程说明: 我们本着实验主义,认为一切理论皆是假设,而实践实验是检验真理的唯一标准!页游服务器取自大型端游单服务器\单地图服务器的设计;用单线程去处理所有的逻辑,IO,数据库,文件操作各有负责的线程,线程之间通信用异步消息队列! 这样方案的优势在于,化解了多进程部署上原创 2015-01-30 11:33:14 · 1862 阅读 · 0 评论 -
MMORPG服务器架构
一.摘要1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等。3.网络游戏的场景管理,AI,脚本的应用等。4.开源的网络服务器引擎5.参考书籍,博客二.关键词网络协议 网络IO 消息 广播 同步 CS TCP/UDP IP 集群 负载均衡 分布式 网关服务器原创 2014-09-19 11:54:16 · 2375 阅读 · 0 评论 -
十字链表的AOI算法
看了云风写的AOI算法文章,自己也照着写了一下,感觉不容易理解,里面提到了十字链表的算法,在某同学提示下写了个实现.算法的大概思想如下.每个场景维护两个链表,分别为X轴和Y轴的坐标按序排列好的链表,也就是比如在X轴链表上,越在前的对象,X坐标越小,Y轴链表同理.这样,每次需要更新状态的时候,只需要在这个链表上向前或者向后遍历结点就知道该通知谁了.这里假设有三个API:Add(向场景原创 2014-06-11 18:34:22 · 5676 阅读 · 0 评论 -
游戏UI设计1
1.1 Surfaces之封装CXSurface1、Surfaces是什么: 通俗的讲surfaces就是一个二维的矩形平面。在DX9中,与其对应的com接口为IDirect3DSurface9,LPDIRECT3DSURFACE9。2、Surfaces的作用: 作为一个矩形平面,surfaces用来在屏幕上显示平面图象,即从文件中读取图象数据呈现给用户。3、I原创 2011-12-07 18:47:33 · 1689 阅读 · 0 评论 -
游戏UI设计2
二.窗口之父CXWnd的封装 在一般的程序中的对话框、按钮、编辑框等都属于窗口。在MFC中,类CWnd作为窗口类的基类,抽象出了它们的共同特征,并由此派生出若干的子类。在普通的windows程序中,我们可以方便的使用MFC为我们封装好的这些类(CDialog, CButton ,CEdit等),而在游戏程序中,由于需要与dx/opengl结合以及效率等原因,因此不直接使用它们,这就需要我们自原创 2011-12-07 18:55:51 · 1304 阅读 · 0 评论 -
OIS输入系统-1_OIS简介与使用
面向对象的输入系统(Object-Oriented Input System(OIS) ) 简介 使用OIS 1、创建常规的Windows窗口 源代码下载2、初始化OIS和常用输入设备 1、包含OIS库 2、创建输入输出设备管理器 3转载 2011-09-29 18:10:50 · 5607 阅读 · 1 评论 -
OIS几个重要的类的使用
OIS几个重要的类的使用一 OIS的简介: OIS有很多的类,头文件也10多个,很多人一到就蒙了,其实不然,虽然头文件很多,但是都很简单。 #include "OIS.h" 包含了所有用到的头文件,使用OIS时,只要包含这一个就行了。转载 2011-09-30 18:56:43 · 2953 阅读 · 0 评论 -
Ogre内部渲染流程分析系列
关于 OGRE 中的 Renderable 要理解OGRE引擎,就要理解其中占很重要位置的 Renderable接口,今天先将一部分我分析的内容贴出来。以下是 Ogre 的代码中的详细说明:Renderable是OGRE中所有可渲染对象的抽象接口这个接口抽象出了在渲染管线中的被分组的离散的可渲染对象基本的方法。此接口的实现类必须是基于单一的材质、单一的世原创 2011-11-10 14:13:54 · 4580 阅读 · 1 评论 -
关于Ogre的OIS的一些资料
关于Ogre的OIS的一些资料全称:Object-Oriented Input System,即面向对象输入系统。官方网站是:http://www.wreckedgames.com/http://sourceforge.net/projects/wgois/转载 2011-09-25 22:47:48 · 2147 阅读 · 0 评论 -
将Ogre写入MFC框架中
1. 新建MFC单文档程序2. 修改项目选项配置 常规 --> 输出目录 --> ../bin/$(ConfigurationName) 常规 --> 中间目录 --> ../obj/$(ConfigurationName) 常规 --> MFC的使用 --> 在静态库中使用MFC C/C++ --> 预处理器 --> 预处理器定义 --> 增加 _AF原创 2011-11-17 21:56:42 · 1240 阅读 · 2 评论 -
OGRE中的四元数与旋转
想象一个物体在3D空间中移动的过程,该物体必然会涉及到旋转。例如一个怪物,他的运动方向会改变,要改变其方向只需要对其进行旋转即可。旋转的方式大致分为三种:Euler旋转,矩阵旋转,以及四元数旋转。这里稍微记录下我目前对于四元数旋转的理解。对于四元数方面的数学,以及其原理,这里不关心,只需要学会如何使用即可。无论是哪一种旋转,物体与该物体的局部坐标系之间的相对位置,相对方位都原创 2011-11-22 16:15:13 · 1471 阅读 · 0 评论 -
OpenIL(DevIL)
OpenIL(DevIL)CxImage和OpenIL都两个对图片读取的库,前者是一个开源库,功能也比较强大,可以读取很多类型的图像文件,比如bmp,jpg,png ,tiff等等。后者也是一个对图片的读取,处理,显示的库文件(似乎不是免费的,我也没有搞懂,不过最关键的是,两个都可以使用就行了),但是,我在VS2008下配置Cxiamge很久都未成功(此库在2005年都停止更新),于是使用Open原创 2011-12-15 23:09:31 · 3228 阅读 · 1 评论 -
CEGUI的事件系统分析
什么是GUI? GUI就是图形用户界面(Graphics User Interface),是指采用图形方式显示的计算机操作用户接口. 什么是GUI的事件? 所谓事件就是指发送给GUI系统的消息,该消息通知GUI系统某种事情已发生,要求作出响应.简言之就是:用户将自己的一个或多个回调函数挂钩到某个“事件”上,一旦“事件”被触发,所有挂钩的函数都被调用。原创 2013-03-12 17:31:01 · 2638 阅读 · 1 评论 -
gb的渲染中的几个类
文章学自于:http://www.cppblog.com/rise-worlds/archive/2009/04/22/80688.htmlgb的渲染中的几个类:RenderFrame RenderStepRenderClickRenderView**************************************************************原创 2012-02-04 18:07:54 · 1164 阅读 · 1 评论 -
GameByro渲染系统剖析
引言:GameByro作为一款次世代引擎,使用了复杂的材质系统,用来满足各种各样的需求。材质代表了物体受到光照后所呈现出的质感,而这种质感在计算机图形学中需要着色代码来完成,所以当前流行的图形引擎设计是使用被渲染对象的材质与shader相关联,GameByro也不例外。GameByro的材质系统可以通过shade tree生成shader程序,增强了应用程序层对可编程渲染管线的控制能力。原创 2012-02-04 21:08:48 · 1291 阅读 · 2 评论 -
PBRT 阅读 : 第一章
参见http://www.opengpu.org/forum.php?mod=forumdisplay&fid=8【题外话:这里只是记录我学习该书的体会,既不是直译,也不是意译,而是顺着作者的思路,把自己理解的东西再讲述出来,对于可能出现的误解会用原文说明。】第一章介绍关于渲染,有很多方式。大致有三类:基于物理学的渲染(Physically based):着原创 2011-12-27 13:29:34 · 5298 阅读 · 0 评论 -
高级碰撞检测技术
自从计算机游戏出现以来,程序员就不断地想办法来更精确地模拟现实世界。就拿乒乓游戏为例子(译者:Pong—被誉为电子游戏的祖先,有幸见过一次:),能见到祖先做的游戏感觉真是爽啊,想看的可以到FTP上下载“地球故事”就可以看到了:),游戏中有一个象征性的小方块(球)和两支拍子,游戏者需要在恰当的时间将拍子移动到恰当的地点,将小球反弹回去。这个基本操作的背后(以现在的标准来看)就是最原初的碰撞检测了。今原创 2011-12-27 16:00:58 · 1709 阅读 · 1 评论 -
Irrlicht游戏引擎初步分析与研究
Irrlicht游戏引擎主要是由一个名叫Nikolaus Gebhardt奥地利人所设计,是sourceforge上的一个开源项目,也是著名的开源游戏引擎。Irrlicht是一个德国神话故事中的一种动物的名字,它能够发光和飞翔,可以在大部分的沼泽地附近发现它。单词"Irrlicht"是两个德国单词("irr"意思是疯狂的;而"Licht"意思是光)的组合。在英语中,它被译为"鬼火"。该项目从200原创 2011-12-23 10:18:30 · 3333 阅读 · 1 评论 -
micropather实现A*算法
MicroPather is a path finder and A* solver (astar or a-star) written in platform independent C++ that can be easily integrated into existing code. MicroPather focuses on being a path finding engine fo原创 2011-12-12 22:41:47 · 1623 阅读 · 0 评论 -
A*寻路初探
译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算原创 2011-09-28 11:12:18 · 1517 阅读 · 0 评论 -
SpeedTree学习与实践笔记
1. 该插件的特点:api无关。它本身只是数据结构和逻辑架构,没有任何渲染语句子,因此为了把它应用到自己的引擎里,需要为之添加渲染相关的语句。而根据sdk的讲解,推荐用户为之搭建中间架构,用来联系SPEEDTREE与自己的引擎。这样做起码有两点好处,搭建的中间架构(也推荐别加任何api相关的语句),因此,即使你以后换了api(譬如从gl换成dx),中间架构还是可以继续沿用的。还有一个好处就是原创 2011-12-05 15:16:45 · 3119 阅读 · 0 评论 -
引擎雏形
就像修房子一样,别管你用多贵的砖头,它只是一块砖头而已,并不是你想要的房子。砖头可以在开发的时候随时换,但是结构一旦定下来,就不好修改了。那么一个基本,却又efficient的结构究竟是什么样的呢?很简单。所有你所需要的就是引擎,有限状态机和内存池。这三个东西一点都不复杂,你可以从头开始写:首先是你的引擎类,需要些什么呢?class CEngine {public:原创 2011-11-28 10:37:24 · 1363 阅读 · 0 评论 -
3D Engine 的设计架构
Introduction (简介)让咱们谈谈你如何撰写一份提供优雅性能的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、动态光线(dynamic lighting)、体雾(volumetric fog)、镜面(mirrors)、入口(portals)、天空体(skyboxes)、节点阴影(vertex shaders)、粒子系统(particle systems)原创 2011-11-21 10:31:55 · 2841 阅读 · 1 评论