技术
文章平均质量分 60
tarkey
这个作者很懒,什么都没留下…
展开
-
网络游戏中的网络编程
谈谈网络游戏中的“网络”编程????近段时间总是有不少人问我关于完成端口模型的一些资料,很多时候其实我很郁闷,为什么大家会选择使用完成端口呢?或者说很多时候他们竟为了使用完成端口,而使用WINDOWS作为网络游戏服务器平台,还一开口罗列出一堆使用WINDOWS平台的网络游戏案例。有些兄弟跟我一直争论“Windows?2003?Server很猛的,效率很高的”,这句话的正确性暂且不讨论,先说Wind原创 2004-09-09 09:49:00 · 3852 阅读 · 1 评论 -
EPOLL为我们带来了什么。
Q:网络服务器的瓶颈在哪? A:IO效率。 在大家苦苦的为在线人数的增长而导致的系统资源吃紧上的问题正在发愁的时候,Linux 2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。传统的select以及poll的效率会因为在线人数的线形递增而导致呈二次乃至三次方的下降,这些直接导致了网络服务器可以支持的人数有了个比较明显的限制。 自从Linux提供了/dev/epoll的设备原创 2005-02-19 16:18:00 · 10421 阅读 · 56 评论 -
卡通渲染的另类勾边方法
根据D3D8里面卡通渲染的例子,里面在勾边的时候是采用对三角形进行着色来实现黑边的效果,对于面比较少的模型来说,会产生很粗糙甚至于不可接受的边缘效果。另外一种比较常用的勾边渲染则是算出法线和光线的夹角接近PI的线,然后来渲染线,这种方法的弊端则是效率太低。 我的方法需要用到stencil buffer,实现步簇是: 1,打开stencil buffer,通过方式设置为a原创 2005-02-21 10:26:00 · 5037 阅读 · 0 评论 -
卡通渲染的另类勾边方法 (续)
上次想出来的方法有一点不妥当之处,就是只能勾出轮廓,没有根据Z值来进行勾边,比如说一个人物的手摆动到身体内部的时候,手的边缘并不能很好的勾画出来。于是冥思苦想,又研究出一套能比较好的解决这个问题的方法。 同样的把人物通过shader往法线方向拉伸得到一个扩大模型,不过渲染的时候不需要用stencil buffer或者z buffer了,而是渲染三角形的时候改成逆时针方向渲染,也就是渲染反面,这样一原创 2005-03-01 15:14:00 · 2825 阅读 · 2 评论 -
不需要任何附加信息的伪凹凸光照计算方法。
本来是和同时在讨论hdr中光的扩散方法的计算,讨论到要根据周围象素的亮度来觉得当前象素是否要受它的影响时,居然做出了这样的效果: 请注意人物裙子上的花纹,和裙子下面的边,居然做出了类似凹凸贴图的效果,原来是因为贴图本身画有一定的阴影,而阴影部分的亮度自然很低,所以在计算光照的时候能达到这样的效果,人物本身是用的phong shading + phong specular。ps的写法是根据当前象素的原创 2005-06-23 11:17:00 · 3945 阅读 · 0 评论 -
水墨渲染初探
研究了几天水墨画,初步琢磨出一套比较快速的水墨风格的渲染方法。 其核心还是勾边,配合美工的水墨风格的材质,来达到一定的水墨效果,虽然不是最好的水墨效果,但是基本上已经初具水墨风格的感觉。 首先对载入的mesh来求出所有三角型的边,然后根据边法线和摄象机的位置来确定比较靠近90度的边数组,然后算出来的每条往两边扩散,新增两个顶点来生成一组新的mesh,再在这个mesh上画上勾边的贴图,得到以下效果:原创 2005-03-17 17:21:00 · 5175 阅读 · 6 评论 -
终极勾边之贴图勾边法
前阵子看了水墨渲染的效果之后,心中很是激动,稍微想了一下,发现真正勾边的王道还是要用贴图勾边,通过边来建立一系列的mesh,然后在mesh上贴图来实现各种效果,包括光晕,以及水墨效果,更能通过贴图动画来实现勾边的动画。 首先需要做的是找出模型中的边来,其方法是首先在载入模型的时候,生成边列表,保存每条边连接的两个顶点,每条边相邻的两个面的编号。然后每一帧遍利所有边,找出边的两个面的法线和摄像机镜头原创 2005-03-21 20:14:00 · 3096 阅读 · 5 评论 -
中国传统风格水墨实时渲染
上次想出通过贴图勾边的方法最终被我自己全部推翻了,而采用另外的贴图勾边的方法。其原理是用一张渐进贴图,然后每个顶点的UV都是通过摄象机和法线的位置点乘而来,那么通过这个方法可以得到一张边缘粗细不同的勾边图。然后第二层贴图仍然是用渐变贴图,通过摄象机和法线的位置点乘,得到一个凸面比较深的颜色的效果,两张混合起来得到以下图象:看上去有些脏,所以第三层光照渐变贴图混合的时候,应该打开MODULATE2X原创 2005-03-29 10:23:00 · 7280 阅读 · 25 评论 -
基于D3D Effect的引擎模式探讨。
前些日子一直在了解OGRE引擎,感觉里面的材质脚本那一块封装得非常的完美,这里的完美是指使用起来有种独特的层次感。于是开始查阅d3d effect的资料,想从中构思出一种引擎模式的结构。目前的3D游戏总是会碰到一些问题,比如说某些特效对显卡有独特的要求之类的,让画面效果和兼容性很难得到保证。于是正好碰上这段时间公司对全3D引擎的迫切需求,我们组开始制作一套全3D的引擎,于是我对视觉效果这一块决定使原创 2005-04-17 22:10:00 · 2876 阅读 · 3 评论 -
初探Parallax Mapping效果。
前几天在shadertech网站上看到一个获金牌的效果,叫relief mapping,其中包含relief texture mapping和steep parallax mapping,效果非常好,于是开始琢磨着如何来实现其效果,由于steep parallax mapping需要ps3.0的支持,relief texture mapping需要二叉树的搜索,都对资源要求比较高,所以暂时实现了p原创 2005-04-22 09:26:00 · 3680 阅读 · 8 评论 -
让Boost.python支持Boost::any类型。
让你的python脚本支持boost::any的格式。 当你有个C++函数:boost::any Get(std::string){ .....}void Set(std::string, boost::any){ .....}这样的两个API要传给python来执行的话,当你运行a.set(hehe, 1);返回的是类型不匹配。那么如何来修改boost.python,让它支持b原创 2005-10-17 13:10:00 · 4204 阅读 · 1 评论 -
[原创]再谈实时演算布料的建模方式。
以前做布料实验的时候,总是只能按顺序创建好了一块四四方方的布,然后运算,实用性非常低,毕竟很多地方的使用都是直接通过读取模型来建模,比如说一块三角型的旗子,或者说面片组成的头发。那么如何通过顶点数据和顶点索引这两个东西来建立布料所需要的Mass-Spring模型呢?首先,我们可以假设每个顶点就是一个弹簧的节点,那么每个三角形索引就是弹簧,这里会出现一个问题,即三角形索引会出现很多重复的情况,那么我原创 2005-06-02 12:01:00 · 4546 阅读 · 5 评论 -
最近在研究Swept Volume的碰撞检测。
在大多数情况下Swept Volume能获得相当精确的碰撞结果,但是对于高速旋转的物体却没有什么太好的办法。即使如此,Swept Volume仍然是一个非常优秀的碰撞检测模型,尤其是应用于柔体和柔体,或者柔体和刚体之间的碰撞。那么什么是Swept Volume呢?在空间中已知道时间t的mesh的位置,和时间t0 = t + dt的位置,当dt比较小的时候,我们可以获得mesh在t0时的位置,由于m原创 2005-06-15 09:56:00 · 6093 阅读 · 2 评论 -
SSE/SSE2版ceilf
最近实现一套纯软件的Power PC speicified intrinsics,包括AltiVec的一些东东,后来发现在x86下执行很慢。于是开始使用SSE/SSE2加速,不过介于PPC和x86指令集巨大的差异,有很多东西需要自己实现,于是有了如下的代码:#ifdef _SSE_OPTIMIZE_inline __m128 _mm_ceil_ps( __m128 v ){static con原创 2006-08-30 10:15:00 · 4204 阅读 · 0 评论 -
HDRI/IBL的一些想法
这几天一直在研究IBL相关的一些东西,感觉效果非常非常棒,而且随着超强性能的新主机平台的推出,在游戏中的IBL马上就会有应用。那么关于IBL的应用,我也就因此产生了一些想法:首先可以根据skybox来做整个场景的HDRI/IBL,这样能产生非常真实的环境效果,其次可以根据静态场景来预先生成一些HDRI,再通过这些HDRI来对场景中的角色,以及其他的活动物体进行shading,可以产生非常好的效原创 2006-08-02 16:22:00 · 4634 阅读 · 1 评论 -
《人类情感:社会学理论》读书笔记
1,人类的情感类似调色盘一样,大部分的复杂情感都是由一些普通的基础情感叠加在一起形成的。绝大多数理论都认为以下一些情感为基础情感:愤怒,恐惧,悲伤,高兴 比如说自豪感就是愤怒+高兴叠加在一起形成的一种感觉。这些基础情感,又分为不同的强度 2,从宏观和微观的方向来看待社会结构和文化概念宏观关注国家,政治,经济,宗教,法律,教育微观关注人和人之间的原创 2010-05-26 17:40:00 · 4125 阅读 · 0 评论 -
利用扩大模型以及摄像机空间法线贴图来实现盔甲的发光。
老大要我看了段MU奇迹的游戏中视频,说里面盔甲的发光效果很炫。 初一看,有点摸不着头脑,不知道是如何做的,于是就坐在显示器前一次又一次的看着模型发呆,后来发现在奇迹中的盔甲有一种水晶般的光,随着法线的变化在变化,而且有一定的体积感。沉思一阵后,想出以下方法: 1,首先按照缺省的渲染方式渲染原模型 2,把需要加高光的模型中的每个顶点沿法线方向拉伸一定的距离 3,把拉伸后的模型的贴图换成一张颜色渐进的原创 2005-02-22 20:30:00 · 2616 阅读 · 3 评论 -
我的布料实时动画 + 椭球体碰撞的DEMO。
http://gd.91.com/Modules/07e890be-21a9-44d3-bc51-e3844d86d761.htm其中F2 - F4控制椭球体在x-y平面上运动。除了风力之外其他参数因为我老大不让我开放,所以暂时只开放了对风力参数的调整。 Waiting for your comments =)原创 2005-02-05 13:13:00 · 2423 阅读 · 2 评论 -
模拟布料运算之后的心得介绍。
首先,这是一篇牵扯到数学和物理知识的文章,如果您对文中所涉及的公式有所不明白的话,请在边上摆上一本《高等数学》以及一些物理学常识的知识。首先来讲布,第一个问题是:为什么要模拟布的运动?游戏中很多地方都有布,那么目前大部分的做法是什么样的呢?目前大多数游戏所采用的方法是对布建立骨骼,然后由美工针对每个动作做不同的布料骨骼动画,这种做法带来的弊端就是布料不会随着周围环境的变化来变化。比如说,周围刮原创 2005-02-09 20:10:00 · 4833 阅读 · 3 评论 -
社会学和游戏制作的关系。
回想起当年我玩各种网络游戏的时候,一进游戏,什么都没有,眼前看着一堆穿着金光闪闪的漂亮装备的人跑来跑去,看到有人在不停的刷屏叫买叫卖的打着各种广告,有一种和现实社会截然不同的感觉,实打实的觉得自己在这个虚拟社会里面是个新手。虽然游戏都设置有密语等功能,但是这些对于新手来说,几乎是多余的,一开始总是一个人在孤单的打低级的怪物,这个时候的同伴只可能有两种人,一种是和你一样的新手,另外一种,则是练小号的原创 2004-09-09 09:55:00 · 1810 阅读 · 1 评论 -
再谈网络游戏同步
呵呵,一年前的这个时候发过一系列讨论网络游戏同步的帖子。一年后的今天,再重新讨论讨论这个问题。。。不知道大家是否碰到过这种情况,当某个玩家发出一个火球,这个火球有自己的运动轨迹,那么如何来判断火球是否打中了人呢?大部分情况,当策划提出这个要求的时候,一般会被程序否认,原因是:太麻烦了,呵呵。复杂点的还有包括两个火球相撞之类的事情发生。那么网络游戏中,是否真的无法模拟实现这种模拟呢?首先原创 2004-09-09 08:36:00 · 2123 阅读 · 0 评论 -
环型内存的实现。
有两个线程,一个在读一个BUF,另一个在写这个BUF。最开始的做法是这样的:定义一个尾指针,每次写的时候都往尾指针里面写,读的时候就从头读,读完之后把剩下没读完的重新拷贝到头,并修改尾指针。考虑到每次读的时候都需要使用到内存拷贝(memcpy),于是想了办法,用环型内存来处理。需要两个指针,一个叫小偷(thief_ptr),另一个叫警察(police_ptr),其中小偷扮演写的角色,警原创 2004-09-25 14:38:00 · 1885 阅读 · 8 评论 -
基于规则系统的人工智能在游戏中的应用
首先介绍一下RBS(Rule Based System)。从字面上很容易看出,这是指基于规则的系统,和神经元网络不同,这是人工智能的另一个分支。该系统用来解决问题的方法是基于如下形式的一个过程:其中当前状态作为输入,兰色区域为人工智能处理的过程,输出为事件,同时事件本身又会影响着状态的变化。这篇文章讲着重讲解关于匹配和结果过滤的算法理论和具体的C/C++实现。 要做匹配,首先就应该确定匹配的格式,原创 2004-09-21 12:17:00 · 3602 阅读 · 4 评论 -
游戏开发之策划入门课
针对目前国内大部分策划在设计游戏时的“经验主义”作风,希望本文能够让大家 对如何正确看待游戏设计中出现的各种问题有比较科学一些的了解。 首先,我们把网络游戏定义为一个网络虚拟的世界(Net-VEs),那么我们来设计这 样一个世界需要注意些什么呢?因当让玩家沉浸在这样一个世界里面,积极的响应 来自这个世界的各种信息,也就是常说的那种身临其境的感觉。 接下来先来看看网络虚拟世界所应该具备的五种要素:原创 2004-09-21 13:21:00 · 1251 阅读 · 0 评论 -
网络游戏同步
小谈网络游戏同步 同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的。其实呢,解决同步问题的最简单的方法就是把每个玩家的动作都向其他玩家广播一遍,这里其实就存在两个问题:1,向哪些玩家广播,广播哪些消息。2,如果网络延迟怎么办。事实上呢,第一个问题是个非常简单的问题,不过之所以我提出这个问题来,是提醒大家在设计自己的消息结构的时候,需要原创 2004-09-09 08:35:00 · 2633 阅读 · 5 评论 -
让脚本引擎支持动态链接库。
大家是不是总是郁闷,要在脚本中访问数据库,就又要重新编译一次脚本引擎,写一堆的接口来来让脚本可以访问数据库,或者又碰到要在脚本中访问网络,又要重新编译一次脚本引擎,写一堆的接口。每增加一次新东西,都需要重新修改脚本引擎,是不是很麻烦呢? 其实有个简单的方法,直接让你的脚本引擎支持动态链接库即可。 首先,我们知道,访问动态链接库有两种方法,一种是在连接的时候指定,另外一种则是在运行中指定。为了能让脚原创 2004-09-09 10:03:00 · 1725 阅读 · 1 评论 -
防外挂系列
可能有点长,大家耐心点看完,呵呵。《老子看不惯外挂系列 之 彻底粉碎钩子型外挂》现在大部分的主流外挂,包括按键精灵,自动做一些动作之类的外挂。 都是通过HOOK进游戏窗口,并且用不同的HOOK类型来完成的,比如对于 网络,通常是通过HOOK消息,把DLL弄到我们的游戏程序中,然后通过 GetProcAddress得到DLL中它们卑劣的函数的地址和真实的函数地址, 然后通过WriteProc原创 2004-09-09 09:43:00 · 4035 阅读 · 6 评论 -
谈谈网络游戏中的互动。。
组队系统需要什么?帮会系统又需要什么? 加个聊天频道,弄个链表保存一下就叫组队啦? 先看看队伍的定义:共同的,统一的时间,空间,目标。 没有哪个玩家会觉得你打你的怪,我做我的任务这样组队在一起比较有意义吧。 当然,当他们只是想利用组队进行交流的话,这个到无所谓。 但是经常就会有些玩家,由于不明白对方的意愿,而不知道该不该和他组队。 那么如何来改进这个组队系统呢?有些网络游戏做得比较好,就是提供了征原创 2004-09-09 09:52:00 · 1508 阅读 · 0 评论 -
游戏的基础结构。
就像修房子一样,别管你用多贵的砖头,它只是一块砖头而已,并不是你想要的房子。砖头可以在开发的时候随时换,但是结构一旦定下来,就不好修改了。 那么一个基本,却又efficient的结构究竟是什么样的呢?很简单。所有你所需要的就是引擎,无限状态机和内存池。这三个东西一点都不复杂,你可以从头开始写:首先是你的引擎类,需要些什么呢?class CEngine {public: CEngine原创 2004-09-25 14:34:00 · 1865 阅读 · 5 评论 -
Dead reckoning的改进模型。
今天在玩一款网络游戏的时候,发现一个问题,当用键盘操作主角的时候。 同时按住两个方向键,人物并不是往那两个方向的夹角走直线,而是在围绕一个点做圆周 运动,对于这种运动方式,如果用传统的dead reckoning模型,其方向将不停的在变,则 会带来大量的网络流量,那么如何解决这样的问题呢。低头沉思若干时间,终于恍然大悟。 首先用数学模型来描叙传统的dead reckoning模型: s(t) =原创 2004-10-29 10:37:00 · 3527 阅读 · 0 评论 -
基于英文单词的快速HASH索引算法。
因为有项目需要,要做一个类似ispell的软件,其中会产生大量的对单词的查找操作,于是经过一翻研究,得出以下HASH算法,经过验证比一般的查表的FNV HASH算法产生的分布曲线基本没什么两样,并且在大部分的不同字典下,本算法要比查表的FNV HASH算法表现出速度更快,分布更均匀。但是因为是实验结果,所以暂时还没得出有效的数学推论,但是从大量的不同的字典测试数据来看,此算法确实效率不错。由于原创 2004-11-05 01:06:00 · 5611 阅读 · 7 评论 -
读Chris Crawford 有感.
很久没看到Chris Crawford的大作了,这次他于11月出的新书,自然要抢先看一看。从书名就可以看出,主要是讲跟storytelling相关的一些东西,而且很自然,他的所有的作品都是围绕interactive来谈的。其中有一点很精华的概念,对所有游戏设计者来说,都很重要,叫第二人称视觉。其实所有的艺术创作者都有第二人称视觉的概念,也就是说,在设计的时候,总是要考虑观众将会对其作品产生什么样的原创 2004-12-30 15:45:00 · 1104 阅读 · 0 评论 -
网络赛车DR算法中关于角速度的解决方案。
如果忽略角速度,则在赛车拐大弯的时候网络远程所看到的图象将是锯齿状 的圆弧,而并不是平滑的。 于是这里提出一个角速度的概念,当键盘的左/右键在按下的时候,在PDU包 中多传一个角速度,然后远端在收到消息后,按照收到的角速度对赛车进行 一个角速度的模拟,当左右键弹起的时候,角速度为0,这个时候也需要将再 发一条角速度变为0的消息。 需要考虑的比较麻烦的一个问题: 当用户很频繁的单击左/右键的时候,发原创 2005-01-14 20:04:00 · 1774 阅读 · 1 评论 -
椭球体和顶点之间的碰撞检测。
对于某些比较特殊的模型,用包围盒碰撞得到的精确度会有些偏差,尤其是在对于人物背后的披风和人物模型发生碰撞的时候,用普通的包围盒碰撞会得到非常不协调的结果。 这个时候椭球体碰撞就显得尤其的重要,那么下面我们就来看看如何判断一个椭球体和一个顶点的碰撞。 首先我们需要的是一个数据结构来描叙一个椭球体: vector3 midpoint; vector3 radius; vector3 direction原创 2005-01-26 13:09:00 · 2401 阅读 · 1 评论 -
2010 CGDC 随谈
CGDC办了三年了,第一年没赶上,其实当时也不知道有这么个展会,第二年开始看大家伙的都去听了,我凑了个热闹,找公司整了张证,像模像样的听了几堂课,当时的感觉可光荣了,看到了好多各家公司的大头上去演讲,怀揣着一颗崇敬的心,仰视着讲台上的口若悬河的哥们。原创 2010-08-03 11:48:00 · 4695 阅读 · 2 评论