公开/公告号CN102737164A
专利类型发明专利
公开/公告日2012-10-17
原文格式PDF
申请/专利权人 北京像素软件科技股份有限公司;
申请/专利号CN201210182723.9
发明设计人 张明阳;
申请日2012-06-05
分类号G06F19/00;
代理机构北京德琦知识产权代理有限公司;
代理人牛峥
地址 100043 北京市石景山区八大处高科技园区西井路3号3号楼7170房间
入库时间 2023-12-18 06:52:28
法律状态公告日
法律状态信息
法律状态
2015-10-21
授权
授权
2012-12-12
实质审查的生效 IPC(主分类):G06F19/00 申请日:20120605
实质审查的生效
2012-10-17
公开
公开
技术领域
本发明涉及计算机三维显示技术领域,尤其涉及一种在3D游戏场景中 实现锁屏效果的方法。
背景技术
目前大部分的三维(3D,Three Dimensions)大型多人在线角色扮演游 戏(MMORPG,Massively Multiplayer Online Role-Playing Game)游戏采用 的都是单一的第三人称3D视角效果,镜头会跟随游戏角色的移动而移动, 游戏角色始终处于屏幕的中央。在第三人称尾随视角效果中,镜头还会随着 游戏角色的转动而转动。
在某些特定MMORPG游戏环节中,为了给予玩家横板过关的感觉和关 卡的直观感受,让玩家在达成一定条件后才让玩家进入游戏的下一流程,增 加游戏玩法,突出游戏特点和主题,需要暂时锁定镜头位置,限制3D游戏 中玩家的视角在固定范围内,到了限定范围边缘,镜头不再跟随玩家的移动 而移动,称之为锁屏效果。
现有的锁屏效果基本都出现在二维游戏场景中。但是3D游戏使用的是 3D引擎以及3D场景,无法采用2D锁屏方法。
发明内容
本发明提供了一种在3D游戏场景中实现锁屏效果的方法,可以在3D游 戏场景中实现锁屏效果,增进玩家体验。
本发明实施例提供一种在3D游戏场景中实现锁屏效果的方法,包括如下步 骤:
A、在游戏场景中选择需要限定镜头范围的区域作为锁屏区域,设置锁屏区 域的名称和镜头可移动范围,将该锁屏区域对应的游戏关卡设置锁屏标记;
B在游戏进入下一个关卡时,判断该关卡是否配置有锁屏标记,若是,则执 行步骤C,否则退出本流程执行正常的3D镜头处理流程;
C、确定该关卡对应的锁屏区域,镜头移动时判断镜头所在位置,如果超出 该锁屏区域的镜头可移动范围,禁止镜头沿垂直于该锁屏区域边界且向锁屏区 域之外的方向移动;如果未超出该锁屏区域的可移动范围,执行正常的3D镜头 处理流程;
D、通过该关卡后,去除锁屏标记,执行正常的3D镜头处理流程。
较佳地,步骤C所述镜头移动时判断镜头所在位置之前进一步包括:判断 镜头是否处于该锁屏区域的镜头可移动范围之外,若是,将镜头移动到锁屏区 域的镜头可移动范围距离当前镜头位置的最近边界,再执行所述镜头移动时判 断镜头所在位置的步骤,否则直接执行所述镜头移动时判断镜头所在位置的步 骤。
较佳地,步骤A所述在游戏场景中选择需要限定镜头范围的区域作为锁屏 区域,设置锁屏区域的名称和镜头可移动范围包括:
A1、使用场景编辑器,编辑需要限定镜头范围的第一区域;
A2、计算第一区域的沿轴排列包围盒AABB和平均高度,AABB的结构为 4个浮点型的变量,分别为left、right、top和bottom;
A3、从游戏3D引擎获取镜头的左方向的单位向量vLeft,对向量vLeft叉 乘向量(1.0,0.0,0.0)得到垂直向量Tv,对向量vLeft点乘向量(1.0,0.0,0.0)得 到向量vLeft与向量(1.0,0.0,0.0)的夹角的余弦值fcosAngle,使用系统函数acos, 通过fAngle=acos(fcosAngle)获取得到向量vLeft与向量(1.0,0.0,0.0)的夹角角度 fAngle;
A4、判断Tv的y向量的值是否为负,如果为负,fAngle=-fAngle,如果为 正则不做处理;
A5、通过调用系统函数D3DXMatrixRotationY(fAngle)得到旋转矩阵,通 过第一区域的AABB产生4个坐标 (left,0,top),(right,0,top),(left,0,bottom),(right,0,bottom),将旋转矩阵分别乘以这 4个坐标点,得到新的坐标,根据所述新的坐标重新计算第一区域的包围盒,得 到AABB’,四个变量分别为left’、right’、top’和bottom’;
A5、计算AABB’的平均高度height,然后从游戏3D引擎获取镜头视锥体 的视场角度FOV和视点V,通过公式H=V-height,计算镜头视点到区域A的 距离H,通过公式arctan(fov*0.5)*H,计算出视口在区域平面上的宽度的一半 W/2,然后根据镜头的宽高比计算出长度的一半L/2;
A6、用第一区域的新的包围盒AABB’的左边界left’加上W/2得到r_left, 右边界right’减去W/2得到r_right,上边界top’减去L/2得到r_top,下边界bottom’ 加上L/2得到r_bottom,判断r_left是否小于r_right,如果否, r_left=r_right=(r_left+r_right)/2,判断r_top是否大于r_bottom,如果否, r_top=r_bottom=(r_top+r_bottom)/2,从而得到镜头的可移动范围 R(r_left,r_right,r_top,r_bottom)。
较佳地,所述第一区域的形状为矩形或其他多边形形状。
从以上技术方案可以看出,通过在游戏场景中设定锁屏区域,并将相应的游 戏关卡设置设置锁屏标记,这样当游戏运行到特定游戏关卡时,将游戏镜头限 定在该锁屏区域内,从而在3D游戏中也能够表现出横板过关游戏的感觉,突出 游戏主题,增加游戏玩法。
附图说明
图1为本发明实施例提供的在3D游戏场景中实现锁屏效果的方法流程 示意图;
图2为本发明实施例提供的一种设置锁屏区域的镜头可移动范围的流程 示意图;
图3为视锥体的侧视图;
图4为视锥体斜45度视角立体图。
具体实施方式
为使本发明技术方案的技术原理、特点以及技术效果更加清楚,以下结 合具体实施例对本发明方案进行详细阐述。
本发明实施例提供的在3D游戏场景中实现锁屏效果的方法流程如图1 所示,包括如下步骤:
步骤101:在游戏场景中选择需要限定镜头范围的区域作为锁屏区域, 设置锁屏区域的名称和镜头可移动范围,将该锁屏区域对应的游戏关卡设置 锁屏标记。
步骤102:在游戏进入下一个关卡时,判断该关卡是否配置有锁屏标记, 若是,则执行步骤103,否则直接转至步骤107。
步骤103:确定该关卡对应的锁屏区域,判断镜头是否处于该锁屏区域 的镜头可移动范围之外,若是,执行步骤104,否则,执行步骤105。
步骤104:将镜头移动到锁屏区域的镜头可移动范围距离当前镜头位置 的最近边界。
步骤103-104是为了处理开始锁屏时镜头位于锁屏区域的镜头可移动 范围之外的情况,对于多数应用场景而言,进入关卡后镜头总是处于镜头可 移动范围之内,因此所述判断为可选步骤。
步骤105:镜头移动时判断镜头所在位置,如果超出该锁屏区域的镜头 可移动范围,禁止镜头沿垂直于该锁屏区域边界且向锁屏区域之外的方向移 动。如果未超出该锁屏区域的可移动范围,执行正常的3D镜头处理流程。
例如,镜头移动到可移动范围的边界,该边界平行于y轴方向,如果继 续向x轴负方向移动则超出了可移动范围,这时y轴的移动量是仍然可以的。 因此限制镜头禁止向x轴负方向移动,向x轴正方向或者沿y轴移动则是允 许的。这种限定,就是将移动向量的不能移动的方向的值清0,保留其他方 向的移动量。
步骤106:通过该关卡后,去除锁屏标记。
步骤107:执行正常的3D镜头处理流程。
设置锁屏区域的镜头可移动范围可以有多种实现方式,以下通过一个具 体实现方式进行说明。
图2示出了本发明实施例提供的一种设置锁屏区域的镜头可移动范围的 流程,包括如下步骤:
步骤201:使用场景编辑器,编辑一个需要限定镜头范围的区域A,这 个区域A可以是矩形,也可以是其他多边形形状。
步骤202:读取区域A信息,计算区域的沿轴排列包围盒(AABB,Aligned Axis Bounding Box)和平均高度。AABB的结构为4个浮点型的变量,分别 为left、right、top和bottom.
步骤203:从游戏3D引擎获取镜头的左方向的单位向量vLeft,对向量 vLeft叉乘向量(1.0,0.0,0.0)得到垂直向量Tv,对向量vLeft点乘向量 (1.0,0.0,0.0)得到变量fcosAngle,即向量vLeft与向量(1.0,0.0,0.0)的夹角的 余弦值,使用系统函数acos,通过fAngle=acos(fcosAngle)获取得到向量 vLeft与向量(1.0,0.0,0.0)的夹角角度fAngle。
步骤204:判断Tv的y向量的值是否为负,如果为负,fAngle=-fAngle, 如果为正则不做处理。
步骤205:通过调用系统函数D3DXMatrixRotationY(fAngle)得到旋 转矩阵(TM),通过区域A的AABB产生4个坐标 (left,0,top),(right,0,top),(left,0,bottom),(right,0,bottom),将矩阵TM分别乘 以这4个坐标点,得到新的坐标,根据所述新的坐标重新计算区域A的包围 盒,得到AABB’。
步骤206:计算AABB’的平均高度height,然后从游戏3D引擎获取镜 头视锥体的视场角度(FOV,Field Of View)和视点V,通过公式H=V-height, 计算镜头视点到区域A的距离H,通过公式arctan(fov*0.5)*H,计算出视口 在区域平面上的宽度的一半W/2,然后根据镜头的宽高比计算出长度的一半 L/2。视锥体如图3和图4所示,其中图3为视锥体的侧视图,图4为视锥体 斜45度视角立体图。
步骤207:用区域A的新的包围盒AABB’的左边界left’加上W/2,即r_left =left’+W/2,右边界right’减去W/2,即r_right=right’-W/2,上边界top’减 去L/2,即r_top=top’-L/2,下边界bottom’加上L/2,即r_bottom= bottom’+L/2,判断r_left是否小于r_right,如果否, r_left=r_right=(r_left+r_right)/2,判断r_top是否大于r_bottom,如果否, r_top=r_bottom=(r_top+r_bottom)/2,从而得到镜头的可移动范围 R(r_left,r_right,r_top,r_bottom)。
本发明使得在3DMMORPG游戏中,也能够表现出横板过关游戏的感觉, 突出游戏主题,增加游戏玩法。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本 发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在 本发明保护的范围之内。
机译: 一种用于从3d体积中的代表性数据中识别频道的计算机实现的方法以及一种实现该方法的计算机程序产品
机译: 一种用于从3D体积中的代表性数据识别频道的计算机实现的方法以及一种实现该方法的计算机程序产品
机译: 一种用于从3D体积中的代表性数据识别频道的计算机实现的方法以及一种实现该方法的计算机程序产品