文章分类 - 3D 游戏开发 基础
摘要:游戏命中判定:圆桌算法和程序实现游戏中常常要做一个动作的命中判定,比如攻击的命中判定,结果一般为未命中、普通命中,致命命中,命中格挡等(当然复杂起来远不只这些)。一般的,程序上(或策划上)采用的是优先级概率算法或者圆桌算法。优先级概率的算法是:先判定是否未命中,如果命中是否闪躲,如果未闪躲是否招架,最后才是普通攻击(有省略)。也就是说按优先级(顺序)进行概率计算和判断。圆桌算法是将这些属性(命中普通攻击、未命中、招架、命中致命攻击)放在一起,构成一个圆桌。如20%未命中,5%致命攻击,30%招架,剩余45%为普通攻击。从上面的描述来看,圆桌算法输入的参数是一个代表概率的数组,或者,更广泛地说是
阅读全文
摘要:主要参考学习了三篇文章:1、A Simple C++ Finite State Machine2、有限状态机的C++实现(1)-epoll状态机3、State-Driven Game Agent Design第 一篇中,提供了State接口和StateMachine类。State接口包括了进入状态、执行状态、离开状态时应该做的事情,根据具体需要继承 State接口,实现具体的状态类。StateMachine类中提供了状态转移的方法和状态更新的方法:TransitionTo, Update。更新帧时,执行Update,从而执行State接口中的Process方法,可能改变当前的状态,即调用Tra
阅读全文
摘要:听说google proto buffer(以下简称protobuf)已经很久了,但是一直没有尝试使用它。其中一个原因是,项目组自己写了个打包和解包的工具,而且代码也简单,可 以很方便的扩展到自动生成xml之类的配置文件,已经能很好的符合项目的需要。但是最近发现protobuf有个很不错的功能,就是可以向已有的协议中添 加新的字段,而不影响采用旧协议的服务。所以就想试试protobuf。 要使用google proto buffer,首先要进行的就是安装,先说说我的(mac os X 10.7.2)安装过程吧: 1、下载google proto buff。 2、解压下载的包,并且阅读RE...
阅读全文
摘要:.NET中使用Protobuffer 实现序列化和反序列化到官方下载protobuf-net.dll,官方地址:http://code.google.com/p/protobuf-net/2. 建一个控制台应用程序3. 添加类库:protobuf-net.dll到应用程序。示例代码:准备一个要测试的实体类(注意类和方法都要加上protoBuffer序列化的特性): [ProtoContract] public class Student { [ProtoMember(1)] public int StudentId { get; set; } [ProtoMember(2)] public s
阅读全文
摘要:WhateveryprogrammerneedstoknowaboutgamenetworkingJanuary24,2010IntroductionYou’re a programmer. Have you ever wondered how multiplayer games work?From the outside it seems magical: two or more players sharing a consistent experience across the network like they actually exist together in the same vi
阅读全文
摘要:材质是指某个表面的最基础的材料,如木质、塑料、金属或者玻璃等纹理其实就是附着在材质之上,比如,生锈的钢板,满是尘土的台面,绿花纹的大理石,红色织物以及结满霜的玻璃等等.纹理要有丰富的视觉感受和对材质质感的体现。一、材质(一)材质球的使用特性(常用类型)Blinn / Phong / PhongE Lambert / Anisotropic / Shading Map / Surface Shader / Layered Shader给大家先介绍一下材质球,在maya或者是其他三维软件中一般都有以下几种材质:Lambert、Phong、phongE、Blinn、Anisotropic,另外还有L
阅读全文
摘要:MMORPG不同于其它的局域网的网络游戏,它是一个面向整个Internet的连接人数过万的网络游戏,因此他的服务器端设计则极为重要服务器的基本设置在大型网络游戏里,通常设计为C/S结构,客户端不再对数据进行逻辑处理,而只是一个收发装置,从玩家那里接受到操作信息,然后反馈给服务器,再由服务器进行处理后发回客户端,经客户端通过图形化处理,给玩家呈现出一个缤纷的游戏世界。登陆服务器在这里也可以称之为连接服务器,网络游戏的客户端一般是连接到这里,然后再由该连接服务器根据不同的需要,把游戏消息转发给其它相应的服务器(逻辑和地图服务器)也因为它是客户端直接连接的对象,它同时也负担了验证客户身份的工作。地图
阅读全文
摘要:在服务器组的架构下,我们一般会引入一个网关服务器,或类似功能的组件,所有的客户端连接都是到这里,数据然后转发给当前所在的地图服务器。 这 样,在数据广播时便存在一个很大的优化可能性。以前的单服务器架构时,比如要广播移动消息,可以直接找出周围的玩家列表,构造要发送的数据,然后依次调用 send即可。但是在多服务器架构下要是还这么做的话,那地图服务器与网关服务器之间的数据传输量将会非常大,而且这些数据之间除了目标IP地址不一样 外,实际内容完全相同。 其实在以前单服务器架构时就曾考虑过该优化方案。最初使用的立即发送数据包的方式在遇到需要同时发送大量数据时出 现了问题,为了避免由于在逻辑线程内的..
阅读全文
摘要:同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的。其实呢,解决同步问题的最简单的方法就是把每个玩家的动作都向其他玩家 广播一遍,这里其实就存在两个问题:1,向哪些玩家广播,广播哪些消息。2,如果网络延迟怎么办。事实上呢,第一个问题是个非常简单的问题,不过之所以我 提出这个问题来,是提醒大家在设计自己的消息结构的时候,需要把这个因素考虑进去。而对于第二个问题,则是一个挺麻烦的问题,大家可以来看这么个例子: 比如有一个玩家A向服务器发了条指令,说我现在在P1点,要去P2点。指令发出的时间是T0,服务器收到指令的时间是T1,然后向周围的玩家 广播这条消息,消息的内容是“.
阅读全文
摘要:有关位置同步的方案实际上已经比较成熟,网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中,作者也简单提到了位置同步方案的构造过程,但涉及到细节的地方没有深入,这里专门针对这一主题做些回顾。 最直接的同步方案就是客户端在每次发生位置改变时都向服务器报告 ,服务器再转发给周围的其他玩家,其他客户端将对应的游戏实体移动到新的位置上。 但是这样存在一个问题,每个玩家的位置都是自己先开始移动,一段时间之后才在其他玩家的客户端上表现出来。如果只是希望每个客户端上看到的游戏对象都同 时开始移动,那可以让玩家的每一步操作都由服务器确认之后再执行,这样误差将缩减到不同客户端之间的网络延时..
阅读全文
摘要:第一章绪论 1.1 多人游戏 你 对于多人在线游戏一定有着绝妙的创意。可能它是一个虚拟的世界,源自于你超级喜爱的电视节目中,或者它干脆就是一个你和你的朋友们拥有的在线保龄球联盟。 无论如何,真正急待解决的问题在于,相对于奇思妙想来说,真正构建一个大型的多人在线网络游戏,它竟是如此的复杂,以致于许多具有天马行空的伟大创意最后 却只能在历史的车轮中无奈地烟消云散。Darkstar解决了这个棘手的障碍,它提供了一组易于使用的功能库,帮助你处理网络游戏开发过程中所要面临的复杂的、充满挑战性的每个方面。此外,它还致力于提供一个健壮的、稳定的、可弹性伸缩的服务器。使用Darkstar, 你可以很快...
阅读全文
摘要:游戏客户端与运行在Darkstar平台上的服务器端应用程序(拷贝)进行数据交互. 负载均衡和错误恢复均由Darkstar服务管理.Darkstar是Sun实验室的一个开源在线游戏平台项目, 本文主要介绍Darkstar的工作原理.Darkstar集群服务器中的每一个节点都运行一份游戏逻辑代码的拷贝, 这些游戏逻辑代码都位于Darkstar协议栈之上(见下图). 我们从下图可以看到游戏服务器以服务的方式提供给客户:任务服务: 调度和运行任务.数据服务: 确保游戏具有稳定的状态.通道和会话服务: 建立和管理游戏和游戏之间, 游戏和玩家之间的数据通信.Client: 客户端 Game Server:
阅读全文
摘要:最近sun公司开源了他的游戏服务器Darkstar对于我们这些做游戏是一大好消息。 了解了一下,有非常详尽的文档和丰富的资源。 但是配置十分麻烦。搞了一个下午终于搞定了。希望在这里抛砖引玉,引来更好的配置方法。 配置教程: 首先当然要上http://www.projectdarkstar.com/current-download.Html下载游戏服务器,选 Project Darkstar Server, source & binary 的download now。(9.7MB) 下载。 完成并且解压后你会看到sgs-server-dist-0.9.7目录下有bdb-4.5.20,mi
阅读全文
摘要:协议规则: 包头3个字节: 包大小(2个字节),命令(1个字节) 数据包 注意:包大小=命令+ 数据包 的大小 登陆命令: 命令是:0x10; 数据包中第一个字节是版本号,然后是用户名和密码 退出命令: 命令是:0x40; 数据包是空的 session消息: 命令是:0x30; 数据包中是就是消息数据 channel消息(频道消息) 命令是:0x52; 数据包:2个字节的频道ID号的大小+频道ID号+消息数据 服务端回复协议 登陆成功回复: 命令是:0x11; 数据包是:reconnectKey(重连码) 登陆失败回复 命令是:0x12; 数据包是:失败原因 登陆重连...
阅读全文
摘要:什么是法线贴图技术呢?这是一种用来实现3D效果的一种技术,要想理解这种技术还请您听我慢慢道来。 我们知道,在游戏中经常会有这样的情况,就是一个平面——这个平面在现实中并不是一个“平”面,例如砖墙的表面带有石质浮雕等等。这样的情况如果要求游戏开发人员将复杂的3D细节都做出来是不现实的,因为即使不计较在建模时候的复杂度,过多的3D细节也同样会大量消耗显示芯片的性能,让游戏根本没有可玩性。如何利用贴图实现凹凸效果呢? 可行的方法就是将这个平面用一个贴图覆盖,用贴图的纹理实现一定的凹凸效果。但是这种方法实现的效果并不是很好,因为如果视角一变化,看起来就会像一张简单的画有图案的平面了。 后来,聪明...
阅读全文
摘要:Managing Game States in C++文章来源:TonyandPaige.com翻译: Mythma多年前看的一个demo使我第一次完全明白了游戏中的不同状态。这个demo能够从一个特效平滑的过渡到另一个特效,并能从2D漩涡效果直接过渡到3D渲染环境,就像是几个不同的程序写成的。多状态不仅在demo中重要,在游戏中也同样重要。每个游戏程序基本上都是从介绍开始,显示菜单,然后进行游戏。当被击败时,游戏就结束了(通常返回到菜单界面)。大多数游戏中,很可能会同时出现多个状态——比如游戏过程中弹出菜单。传统的处理多状态的方式是使用一大堆的if,switch 和loop语句。程序从介绍状
阅读全文
摘要:[from GameDev] Event Handlinghttp://www.gamedev.net/reference/articles/article2141.aspSimple Event Handlingby Yacine SalmiADVERTISEMENTIntroductionI recently wrote a simple event handling module for a group project. I found it to be quite a useful tool, and I'm writing this article so that hopef
阅读全文
摘要:【01】3D游戏数学简介总导:游戏中会使用到的数学有:三角学、微积分、物理学、代数学、统计学。在学习3D游戏编程的时候,对于所需要的基础数学知识有:矢量、矩阵、四元数、射线、平面、多边形、简单的物理学。1、矢量矢量是游戏开发中涉及的最基本对象,矢量有多种形式,可以是2D、3D或者4D等。3D矢量是一个包含3个浮点数的结构体,每个成员的值代表矢量中不同的轴,也就是x、y、z轴,用于描述三维空间。矢量也可以用于描述3D空间中的方向,它可能是3D编程中最常用的数学对象。2、矩阵矩阵是游戏开发中第二个最常用数学对象。矩阵的主要用于将矢量从一个坐标系转换到另一个坐标系,还可以用于旋转和平移等。矩阵由浮点
阅读全文
浙公网安备 33010602011771号