昆特牌Online——客户端用到的一些技术

[1]    通过建模软件(如3D Max)对游戏场景中的静态对象和动态角色进行建模。

游戏的牌桌和右下角的工作室标志使用了3ds Max建模

牌桌:

标志:

[2]    基于Phong光照模型实现场景的实时光照。

游戏中使用了两个光源:

一个静止的无向光源,放置于与摄像机相同的位置;

一个运动的有向聚光灯,会追踪鼠标的运动,效果如下:

可以看出,截图中鼠标经过的部分(鼠标未在截图中显示)物体被照亮。

代码方面,使用osg::Light和osg::LightSource来指定光源,聚光灯的部分代码如下:

light2_obj = new osg::Light;
light2_obj->setLightNum( 1 );
light2_obj->setAmbient(osg::Vec4(0.5,0.5,0.5,1.0));
light2_obj->setDiffuse( osg::Vec4(1.0,1.0,1.0,1.0) );
light2_obj->setSpecular( osg::Vec4(1.0,1.0,1.0,1.0) );
light2_obj->setPosition( osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f) );
light2_obj->setSpotExponent(1.0);
light2_obj->setSpotCutoff(45.0);
light2_obj->setDirection(osg::Vec3(0.0,10.0,0.0));

osg::ref_ptr<osg::LightSource> lightSource2 = new osg::LightSource;
lightSource2->setLight( light2_obj );
light2 = new osg::PositionAttitudeTransform;
light2->setPosition(osg::Vec3(0.0,0.0,0.0));
light2->addChild( lightSource2.get() );

[3]    利用基本纹理映射技术增强游戏场景的真实感。

从上面的截图中可以看出,游戏中的物体基本上都是使用了纹理映射的。

另外,我还为每个物体指定了材质信息,以实现一些特殊的光照效果,比如下面的自发光效果:(图中发红色的卡牌)

[4]    基于骨骼动画或者关键帧动画技术实现角色动画。

采用了有限动画机实现的关键帧动画。

例如,在玩家出牌的过程中,动画机指定了移动路径上的三个关键点:

卡牌被选中前自身所在的点、被选中后放大的点(15.5,2.2,0.5)、选中后将牌打出时卡牌运动的路径上的两个关键点(视卡牌类型而不同)。

当玩家进行了对应的输入操作后,卡牌会自动沿着指定的路径运动至目的地

示例过程如下:

1.选中卡牌

2.再次点击选中的卡牌,进行出牌动作

3.牌被打出

[5]    碰撞检测。

卡牌在被打出时,由于它的目的地所在行(黄框所示)可能会有之前先到的牌(蓝圈所示)阻挡其运动路径,每张牌在被打出时需要检测其是否有撞上前面的牌,如果撞上了则停下,没撞上则继续移动直至撞上前一张牌。上图卡牌的运动结果如下:

[6]    凸凹纹理映射。

游戏中的牌桌使用了凹凸纹理技术,可以看出比较明显的效果。

有凹凸纹理的:

只有漫反射纹理的:

法线贴图:(使用Nvidia的Photoshop插件绘制)

使用osgFX::BumpMapping实现该效果。

时间: 2024-08-08 22:05:50

昆特牌Online——客户端用到的一些技术的相关文章

昆特牌Online——客户端设计

OpenSceneGraph介绍: OpenSceneGraph(以下简称OSG)是一个开源的三维引擎,被广泛的应用在可视化仿真.游戏.虚拟现实.科学计算.三维重建.地理信息.太空探索.石油矿产等领域.OSG采用标准C++和OpenGL编写而成,可运行在所有的Windows平台.OSX.GNU/Linux.IRIX.Solaris.HP-Ux.AIX.Android和FreeBSD 操作系统. 更多关于OSG的信息:http://www.openscenegraph.org/ 游戏大致规则: 昆

团队项目:昆特牌Online

昆特牌是出现在游戏<巫师3>中的一款卡牌类游戏,规则易懂玩法独到,深受广大玩家喜爱. 昆特牌规则简单,游戏中每张牌有自己的点数和特殊技能,玩家需利用自己有限的手牌在回合中使自己的点数总和大于对手,即可获胜.游戏采用3局2胜制.玩家开局会在卡组中随机抽取10张卡牌,并且可以选择其中2张放回卡组重抽.与一般卡牌游戏不同的是除了依靠少数效果卡和群组效果以外玩家是无法抽取新卡的,也就是说全部的2-3小局游戏里玩家只有10张卡可以用,用过的卡在下个小局中无法再次使用也没有新卡补充.单位卡分为3类,近战,

ACM_题目这么难,来局愉快的昆特牌吧

题目这么难,来局愉快的昆特牌吧 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小Z打比赛,然而比赛太难了,他坐在电脑面前被题淹没不知所措,决定开始打一局昆特牌来舒缓心情,然而这个规则出题人也帮他想好了,他发给小Z三种牌,分别是'A''C''M',每集齐一套'A''C''M',小Z就能放一个技能,听起来酷对不对?现在给出小Z手中的牌,问你他能放多少次技能. Input: 输入包含多组样例,第一行为一个整数T(1≤T≤100)表

昆特牌Online——网络消息传输

事件 玩家->服务器的格式 服务器->玩家的格式 允许玩家出牌 ready (服务器发出此消息前,可以不断地向玩家出牌) 允许服务器向对方发信 ready (一局)游戏开始 hand=int ready 或 later(ready代表接收方玩家先手出牌,later表示其为后手) 出牌(除下述三种外的牌) int(即此牌的编号) int 出牌(功能牌:号角) 38000 horn=int(放置号角的行序号) 38000,int (int是号角行序号) 出牌(功能牌:稻草人) 39000 scar

昆特牌Onlinve——服务器

服务器共分为5个部分: 1.接受客户端连接请求的线程AcepptProcess. 2.响应客户端选择房间,进入房间请求的线程Seat. 3.玩家进入房间后处理游戏进行中数据的线程Room. 4.控制游戏中线程的主函数main. 5.处理网络异常断开连接的异常处理方法. 因为服务器的处理比较简单,所以使用了面向过程的设计方法. 服务器控制流程: 服务器端接受连接线程: 服务器端房间选择线程线程: 服务器端房间运行线程: 界面设计: CMD

客户端(浏览器端)数据存储技术概览

客户端(浏览器端)存储数据有诸多益处,最主要的一点是能快速访问(网页)数据.目前常见的浏览器端数据存储方法有:Cookies,Local Storage,Session Storage,IndexedDB. Cookies Cookies 是一种在文档内存储字符串数据最典型的方式.一般而言,cookies 会由服务端发送给客户端,客户端存储下来,然后在随后让请求中再发回给服务端.这可以用于诸如管理用户会话,追踪用户信息等事情. 此外,客户端也用使用 cookies 存储数据.因而,cookies

基于Html5的智能家居手机客户端设计(一)——找到openhab的rest

今天开始我的毕业设计,基于HTML5的智能家居手机客户端设计.挑剔了好久,终于找到我可以使用国外开源项目智能家居核心,通过restful(我也不是很懂,毕竟我只是电子信息学院爱好网络). REST描述了一个架构样式的网络系统,比如 web 应用程序.在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量

[开源,学习,分享]UWP第三方简书客户端分享

简介 Windows10正式版发布到现在,我利用零零碎碎的一些时间对UWP进行一些学习,也基于这门技术开发了一个第三方的简书App. 基本界面 优酷视频: http://v.youku.com/v_show/id_XMTM2MjU4MjI4NA==.html 基本功能 客户端采用了UWP的技术,所以支持x86,x64,ARM平台,采用了响应式的布局.对手机进行了部分的优化. 对SQLite和本地存储进行了封装,支持缓存. 缓存支持同步和异步的两种方式,分别实现了两个接口: internal in

反向Ajax,实现服务器向客户端推送消息之 Comet

基于 HTTP 长连接.无须在浏览器端安装插件的“服务器推”技术为“Comet”. 下面将介绍两种 Comet 应用的实现模型. 基于 AJAX 的长轮询(long-polling)方式 AJAX 的出现使得 JavaScript 可以调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新.使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于: 服务器端会阻塞请求直到有数据传递或超时才返