一种虚拟角色的视野剔除方法和服务器与流程

文档序号:12735762阅读:287来源:国知局
一种虚拟角色的视野剔除方法和服务器与流程

本发明涉及计算机技术领域,尤其涉及一种虚拟角色的视野剔除方法和服务器。



背景技术:

在目前的虚拟场景中,客户端需要为虚拟角色进行视野剔除(occlusion culling),视野剔除是指判断某一虚拟角色是否能看到另外的虚拟角色时所采取的判断方式,通过客户端一侧进行视野剔除,可以剔除对于虚拟角色不可见的其他角色或者物体。

现有技术中,客户端通过对障碍物进行光栅化处理,从而将障碍物转换成屏幕像素。客户端的光栅化处理通常是将障碍物投影后拆分为多个三角形来实现的,这样做的好处是可以对多个三角形进行简单、统一且快速的运算,并且客户端一侧可以采用图形处理器(Graphics Processing Unit,GPU)进行并行运算。

现有技术中,为虚拟角色进行的视野剔除是在客户端一侧来完成的,但是若客户端开了透视类型的外挂,客户端一侧的角色所能看到的角色或物体则不受限制,现有技术中客户端一侧的视野剔除容易存在作弊行为。另外,客户端在把三角形转换成屏幕像素的过程中,需要将障碍物的图像拆分为多个三角形,从而降低了光栅化的效率。另外即使两个三角形靠得极近,转换成屏幕像素后,仍然有会出现一条像素缝隙把两个像素三角形分开,从而造成光栅化过程所产生的舍入误差。



技术实现要素:

本发明实施例提供了一种虚拟角色的视野剔除方法和服务器,用于通过服务器一侧为虚拟角色进行视野剔除,防止客户端的透视类型外挂,同时提高光栅化的效率,避免光栅化过程所产生的舍入误差。

为解决上述技术问题,本发明实施例提供以下技术方案:

第一方面,本发明实施例提供一种虚拟角色的视野剔除方法,包括:

服务器将障碍物投影到第二虚拟角色的投影平面上,得到所述障碍物在所述投影平面上的凸多边形,所述障碍物处于第一虚拟角色和所述第二虚拟角色之间;

所述服务器对所述凸多边形进行光栅化处理;

所述服务器根据光栅化处理的结果确定所述凸多边形是否完全覆盖所述第二虚拟角色在所述投影平面上所占的投影面积;

若所述凸多边形完全覆盖所述第二虚拟角色的投影面积,所述服务器将所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,所述客户端用于显示所述第一虚拟角色所在的虚拟场景,所述第一视野剔除结果包括:所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除;

若所述凸多边形没有完全覆盖所述第二虚拟角色的投影面积,所述服务器向所述客户端发送第二视野剔除结果,所述第二视野剔除结果包括:所述第二虚拟角色处于所述第一虚拟角色的视野范围内。

第二方面,本发明实施例还提供一种服务器,包括:

障碍物投影模块,用于将障碍物投影到第二虚拟角色的投影平面上,得到所述障碍物在所述投影平面上的凸多边形,所述障碍物处于第一虚拟角色和所述第二虚拟角色之间;

光栅化处理模块,用于对所述凸多边形进行光栅化处理;

投影判断模块,用于根据光栅化处理的结果确定所述凸多边形是否完全覆盖所述第二虚拟角色在所述投影平面上所占的投影面积;

视野剔除模块,用于若所述凸多边形完全覆盖所述第二虚拟角色的投影面积,将所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,所述客户端用于显示所述第一虚拟角色所在的虚拟场景,所述第一视野剔除结果包括:所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除;

发送模块,用于若所述凸多边形没有完全覆盖所述第二虚拟角色的投影面积,向所述客户端发送第二视野剔除结果,所述第二视野剔除结果包括:所述第二虚拟角色处于所述第一虚拟角色的视野范围内。

从以上技术方案可以看出,本发明实施例具有以下优点:

在本发明实施例中,服务器首先将障碍物投影到第二虚拟角色的投影平面上,得到障碍物在投影平面上的凸多边形,该障碍物处于第一虚拟角色和第二虚拟角色之间。服务器对凸多边形进行光栅化处理,服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色在投影平面上所占的投影面积。若凸多边形完全覆盖第二虚拟角色的投影面积,服务器将第二虚拟角色从第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,第一视野剔除结果包括:第二虚拟角色从第一虚拟角色的视野范围内剔除。若凸多边形没有完全覆盖第二虚拟角色的投影面积,服务器向客户端发送第二视野剔除结果,第二视野剔除结果包括:第二虚拟角色处于第一虚拟角色的视野范围内。由于本发明实施例中通过服务器一侧为虚拟角色进行视野剔除,服务器向客户端发送视野剔除结果,服务器只需要告知客户端本端的第一虚拟角色的视野内可出现的虚拟角色,从而防止客户端的透视类型外挂。同时本发明实施例中服务器可以对凸多边形进行光栅化处理,而无需再拆分为多个三角形,因此可以提高光栅化的效率,避免光栅化过程所产生的舍入误差。

附图说明

图1本发明实施例提供的一种虚拟角色的视野剔除方法的流程方框示意图;

图2为本发明实施例提供的障碍物的投影过程示意图;

图3-a为本发明实施例提供的光栅化处理的扫描算法初始过程示意图;

图3-b为本发明实施例提供的光栅化处理的扫描算法遍历过程示意图;

图4-a为本发明实施例提供的一种服务器的组成结构示意图;

图4-b为本发明实施例提供的另一种服务器的组成结构示意图;

图4-c为本发明实施例提供的另一种障碍物投影模块的组成结构示意图;

图5为本发明实施例提供的虚拟角色的视野剔除方法应用于服务器的组成结构示意图。

具体实施方式

本发明实施例提供了一种虚拟角色的视野剔除方法和服务器,用于通过服务器一侧为虚拟角色进行视野剔除,防止客户端的透视类型外挂,同时提高光栅化的效率,避免光栅化过程所产生的舍入误差。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

以下分别进行详细说明。

本发明虚拟角色的视野剔除方法的一个实施例,具体可以应用于服务器一侧执行视野剔除,向客户端发送的是视野剔除后的处于视野范围内的其它虚拟角色,例如在游戏场景下进行游戏角色的视野剔除。请参阅图1所示,本发明一个实施例提供的虚拟角色的视野剔除方法,可以包括如下步骤:

101、服务器将障碍物投影到第二虚拟角色的投影平面上,得到障碍物在投影平面上的凸多边形,障碍物处于第一虚拟角色和第二虚拟角色之间。

在本发明实施例中通过服务器为第一虚拟角色进行视野剔除,首先确定该第一虚拟角色所在虚拟场景中出现的其它虚拟角色,将除第一虚拟角色以外的其它虚拟角色定义为第二虚拟角色,不限定的是,在本发明实施例中第一虚拟角色所在的应用场景中还可以出现第三虚拟角色、第四虚拟角色等,服务器对第三虚拟角色、第四虚拟角色的剔除也参阅服务器对第二虚拟角色的剔除过程,后续实施例中以第二虚拟角色能否出现在第一虚拟角色的视野范围内为例进行详细说明。

在本发明实施例中,第一虚拟角色所在的虚拟场景中还存在第二虚拟角色,在第一虚拟角色和第二虚拟角色之间还存在障碍物,该障碍物可以虚拟场景中的道具(例如房屋、树木)或者除第二虚拟角色以外的其它虚拟角色,该障碍物可能遮挡住第二虚拟角色,从而第一虚拟角色无法从自己的视角内观察到该第二虚拟角色。服务器首先获取到出现在虚拟场景中的障碍物,例如获取该障碍物的位置坐标,该障碍物的图像形状和大小等。然后服务器获取到第二虚拟角色的投影平面,将障碍物投影到第二虚拟角色的投影平面上,得到障碍物在投影平面上的凸多边形,其中障碍物在投影平面上的凸多边形可以是多种形状的凸多边形,例如可以是凸五边形、凸六边形或者凸N边形,N的取值不限定。

在本发明的一些实施例中,步骤101中服务器将障碍物投影到第二虚拟角色的投影平面上,具体可以是服务器采用透视投影和/或正射投影的方式将障碍物投影到所述第二虚拟角色的投影平面上。透视投影属于中心投影,它是从某个投射中心将障碍物投射到单一投影面上所得到的图形。正射投影的投影平面切于地球面上一点,视点在无限远处,投影光线是互相平行的直线,并与投影平面相垂直,可显示出半球。

在本发明的一些实施例中,本发明实施例提供的虚拟角色的视野剔除方法还可以包括如下步骤:

A1、服务器获取第一虚拟角色在虚拟场景内的第一位置坐标;

A2、服务器根据第一虚拟角色所采用的视角判断从第一位置坐标到第二位置坐标之间的直线上是否存在障碍物,第二位置坐标是第二虚拟角色在虚拟场景中的位置坐标;

A3、若从第一位置坐标到第二位置坐标之间的直线上不存在障碍物,服务器向客户端发送第三视野剔除结果,第三视野剔除结果包括:第二虚拟角色在第一虚拟角色的视野范围内;

A4、若从第一位置坐标到第二位置坐标之间的直线上存在障碍物,触发执行如下步骤101:服务器将障碍物投影到第二虚拟角色的投影平面上。

其中,服务器在执行步骤101之前还可以通过步骤A1和步骤A2所记载的方式判断在第一虚拟角色所在的虚拟场景中是否出现障碍物,服务器首先确定第一虚拟角色的第一位置坐标、第二虚拟角色的第二位置坐标,然后将这两个位置坐标之间建立直线,根据第一虚拟角色所采用的视角判断从第一位置坐标到第二位置坐标之间的直线上是否存在障碍物,障碍物夹在两个虚拟角色之间时,该障碍物可能会阻挡一个虚拟角色不被另一个虚拟角色观察到,若从第一位置坐标到第二位置坐标之间的直线上不存在障碍物,则执行步骤A3,服务器向客户端发送第三视野剔除结果,第三视野剔除结果包括:第二虚拟角色在第一虚拟角色的视野范围内,即第二虚拟角色对于第一虚拟角色而言是可见的。若从第一位置坐标到第二位置坐标之间的直线上存在障碍物,在这种情况下再触发执行前述的步骤101。

102、服务器对凸多边形进行光栅化处理。

在本发明实施例中,一个障碍物在第二虚拟角色的投影平面上可以得到一个凸多边形,不需要将该凸多边形再分割为多个三角形就可以直接对该凸多边形进行光栅化处理,从而节省分割多边形为多个三角形的开销,不需要对多个三角形进行光栅化处理,从而可以提高光栅化的处理效率。

本发明实施例中服务器针对凸多边形可以进行光栅化处理,从而将凸多边形的顶点数据转换为屏幕像素,该屏幕像素可以存储在帧缓冲区中。凸多边形是障碍物的投影形状,凸多边形进行光栅化处理可以将障碍物的投影形状为屏幕上用于对应位置的像素,光栅化的本质是坐标变换、几何离散化。

在本发明的一些实施例中,步骤104中服务器对凸多边形进行光栅化处理,包括如下步骤:

步骤1、服务器获取凸多边形的所有顶点的位置坐标;

步骤2、服务器根据坐标轴方向从所有顶点的位置坐标中选择出第一坐标值和第二坐标值,第一坐标值、第二坐标值为根据坐标轴方向确定的最大坐标值和最小坐标值,或第一坐标值、第二坐标值为根据坐标轴方向确定的最小坐标值和最大坐标值;

步骤3、服务器从第一坐标值开始沿着凸多边形的边分别按照顺时针方向和逆时针方向遍历凸多边形的各个顶点,在遍历各个顶点的过程中,对遍历后的顶点进行连线后组成的图形进行光栅化,直至最终到达第二坐标值时完成光栅化处理。

其中,所有充当遮挡物的凸多面体、长方体,通过透视投影或正射投影后都是凸多边形,先确定出凸多边形的所有顶点的位置坐标,然后找出在坐标轴方向上中的最大坐标值和最小坐标值,可以从最大坐标值开始按照顺时针方向和逆时针方向遍历凸多边形的各个顶点,也可以从最小坐标值开始按照顺时针方向和逆时针方向遍历凸多边形的各个顶点。在遍历各个顶点的过程中,对遍历后的顶点进行连线后组成的图形进行光栅化。需要说明的是,在步骤3中需要对凸多边形的各个顶点进行依次遍历,例如沿着凸多边形的相邻边进行遍历,逐个对遍历后的顶点进行连线后组成的图形进行光栅化,在没有满足结束条件前需要多次执行步骤3。

进一步的,在本发明的一些实施例中,前述的步骤3具体可以包括如下步骤:

步骤31、服务器从第一坐标值开始,沿着凸多边形的边分别按照顺时针方向和逆时针方向获取到第三坐标值和第四坐标值,第三坐标值对应的顶点、第四坐标值对应的顶点都与第一坐标值对应的顶点相邻;

步骤32、服务器将第一坐标值赋值给顺时针当前顶点Vcw,将第三坐标值赋值给顺时针下一顶点Vcwn,Vcwn=next(Vcw),服务器将第一坐标值赋值给逆时针当前顶点Vccw,将第四坐标值赋值给逆时针下一顶点Vccwp,Vccwp=prev(Vccw);

步骤33、服务器对第一线段和第二线段在凸多边形内组成的公共部分进行光栅化处理,第一线段包括:Vcw对应的顶点和Vcwn对应的顶点之间的连线,第二线段包括:Vccw对应的顶点和Vccwp对应的顶点之间的连线;

步骤34、服务器从Vcwn和Vccwp中选择出与第一坐标值之间差值的绝对值最小的坐标值,若Vcwn与第一坐标值之间差值的绝对值最小,则沿着凸多边形的边按照顺时针方向找到第五坐标值,将第三坐标值赋值给Vcw,将第五坐标值赋值给Vcwn,然后重新执行步骤33,第五坐标值对应的顶点与第三坐标值对应的顶点相邻;若Vccwp与第一坐标值之间差值的绝对值最小,则沿着凸多边形的边按照逆时针方向找到第六坐标值,将第四坐标值赋值给Vccw,将第六坐标值赋值给Vccwp,然后重新执行步骤33,第六坐标值对应的顶点与第四坐标值对应的顶点相邻;当Vcw和Vccw的取值都不等于第二坐标值时,重新执行步骤33和步骤34,当Vcw或Vccw的取值等于第二坐标值时完成光栅化处理。

具体的,在步骤31中,先获取到第一坐标值对应的顶点在凸多边形上的两个相邻顶点,即第三坐标值对应的顶点和第四坐标值对应的顶点。在步骤32中,按照顺时针方向和逆时针方向各有一个数组,顺时针遍历使用的数组为:Vcwn-Vcw,两者满足如下关系:Vcwn=next(Vcw),逆时针遍历使用的数组为:Vccwp-Vccw,两者满足如下关系:Vccwp=prev(Vccw)。步骤32中首先对顺时针数组和逆时针数组进行初始赋值,第三坐标值-第一坐标值赋值给Vcwn-Vcw,第四坐标值-第一坐标值赋值给Vccwp-Vccw。

完成对两个数组的初始赋值之后,执行步骤33,服务器对第一线段和第二线段在凸多边形内组成的公共部分进行光栅化处理,该第一线段包括:Vcw对应的顶点和Vcwn对应的顶点之间的连线,该第二线段包括:Vccw对应的顶点和Vccwp对应的顶点之间的连线。步骤33对两个线段在凸多边形内组成的公共部分进行光栅化具体可以包括如下过程:从Vccw和Vcw中选取与第一坐标值之间差值的绝对值最小的坐标值1,从Vccwp和Vcwn中选取与第一坐标值之间差值的绝对值最大的坐标值2,则对应于凸多边形内坐标值处于坐标值1和坐标值2之间的图形部分标识出来作为光栅化处理的结果。

完成对凸多边形内的第一步光栅化处理之后,沿着凸多边形的边继续为数组Vcwn-Vcw和Vccwp-Vccw更新坐标值,服务器从Vcwn和Vccwp中选择出与第一坐标值之间差值的绝对值最小的坐标值,若Vcwn与第一坐标值之间差值的绝对值最小,则沿着凸多边形的边按照顺时针方向找到第五坐标值,将第三坐标值赋值给Vcw,将第五坐标值赋值给Vcwn,然后重新执行步骤33,第五坐标值对应的顶点与第三坐标值对应的顶点相邻;若Vccwp与第一坐标值之间差值的绝对值最小,则沿着凸多边形的边按照逆时针方向找到第六坐标值,将第四坐标值赋值给Vccw,将第六坐标值赋值给Vccwp,然后重新执行步骤33,第六坐标值对应的顶点与第四坐标值对应的顶点相邻;当Vcw和Vccw的取值都不等于第二坐标值时,重新执行步骤33和步骤34,当Vcw或Vccw的取值等于第二坐标值时完成光栅化处理。通过步骤33和步骤34的反复执行,凸多边形的边不断被遍历,直至Vcw和Vccw中有一个取值先达到第二坐标值,此时可以完成光栅化处理。

在本发明的一些实施例中,当坐标轴方向为纵轴方向时,第一坐标值、第二坐标值为根据纵轴方向确定的最大坐标值和最小坐标值,Vcwn和Vccwp中与第一坐标值之间差值的绝对值最小的坐标值为Vcwn和Vccwp中取值最大的坐标值;

当坐标轴方向为纵轴方向时,第一坐标值、第二坐标值为根据纵轴方向确定的最小坐标值和最大坐标值,Vcwn和Vccwp中与第一坐标值之间差值的绝对值最小的坐标值为Vcwn和Vccwp中取值最小的坐标值;

当坐标轴方向为横轴方向时,第一坐标值、第二坐标值为根据横轴方向确定的最大坐标值和最小坐标值,Vcwn和Vccwp中与第一坐标值之间差值的绝对值最小的坐标值为Vcwn和Vccwp中取值最大的坐标值;

当坐标轴方向为横轴方向时,第一坐标值、第二坐标值为根据横轴方向确定的最大坐标值和最小坐标值,Vcwn和Vccwp中与第一坐标值之间差值的绝对值最小的坐标值为Vcwn和Vccwp中取值最小的坐标值。

具体的,步骤31至步骤34中凸多边形的各个顶点组成的图形的光栅化处理顺序可以有多种,例如从纵轴最大顶点向纵轴最小顶点扫描,还可以以横轴最大顶点向横轴最小顶点扫描,也可以分别从最小顶点向最大顶点扫描,根据横轴/纵轴、最大顶点/最小顶点进行两两组合分类,一共有四种扫描方式,无论通过哪种光栅化处理顺序,都可以完成对凸多边形的光栅化处理。

103、服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色在投影平面上所占的投影面积。

在本发明实施例中,服务器对凸多边形完成光栅化处理后,根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色在投影平面上所占的投影面积。若第二虚拟角色在投影平面上所占的投影面积都被凸多边形所覆盖,则第二虚拟角色被障碍物遮挡,此时需要执行步骤104。若第二虚拟角色在投影平面上所占的投影面积没有被凸多边形所完全覆盖,则第一虚拟角色可以看到第二虚拟角色,此时需要执行步骤105。

在本发明的一些实施例中,步骤103服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色的投影面积,包括:

B1、服务器将第二虚拟角色的投影面积划分为多个投影网格;

B2、服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色的所有投影网格。

其中,为了确定凸多边形是否完全覆盖第二虚拟角色的投影面积,可以将第二虚拟角色的投影面积划分为多个投影网格。凸多边形能够完全覆盖第二虚拟角色的所有投影网格,则说明障碍物能够遮挡住第二虚拟角色,凸多边形没有完全覆盖第二虚拟角色的所有投影网格,则说明障碍物不能遮挡住第二虚拟角色。该投影网格的网格大小确定了光栅化处理的精度问题,若投影网格很大则存在精度下降的问题,若投影网格很小则计算量大幅增加的问题。

进一步的,前述步骤B1中的投影网格可以通过如下方式计算网格大小:

Grid=Distance×2×tan(α/2);

其中,Grid表示投影网格的网格大小,Distance表示第一虚拟角色和第二虚拟角色之间的距离,tan表示正切函数符号,α表示第一虚拟角色的视角参数。

具体的,通过调整视角参数,可以在计算精度和计算量之间做折中,网格越小,计算精度越高。举例说明,视角参数可以根据虚拟场景来确定,经典游戏摄像头可以是60度,本发明实施例视角参数的取值可以略小于60度,例如视角参数可以为58度。

104、若凸多边形完全覆盖第二虚拟角色的投影面积,服务器将第二虚拟角色从第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,客户端用于显示第一虚拟角色所在的虚拟场景,第一视野剔除结果包括:第二虚拟角色从第一虚拟角色的视野范围内剔除。

在本发明实施例中,若凸多边形完全覆盖第二虚拟角色的投影面积,则第二虚拟角色对于第一虚拟角色而言是不可见的,服务器将第二虚拟角色从第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,第一视野剔除结果包括:第二虚拟角色从第一虚拟角色的视野范围内剔除。其中,客户端用于显示第一虚拟角色所在的虚拟场景,该客户端只能从服务器接收到第一虚拟角色的视野范围内的其它虚拟角色,使得客户端无法使用透视类型外挂,若第一虚拟角色的视野范围内没有出现其它虚拟角色或者出现其它虚拟角色的频率较低,则服务器可以减少向客户端发送游戏数据的频率,从而节省服务器的下行流量。

105、若凸多边形没有完全覆盖第二虚拟角色的投影面积,服务器向客户端发送第二视野剔除结果,第二视野剔除结果包括:第二虚拟角色处于第一虚拟角色的视野范围内。

在本发明实施例中,若凸多边形没有完全覆盖第二虚拟角色的投影面积,则说明障碍物不会完全遮挡住第二虚拟角色,第二虚拟角色对于第一虚拟角色而言是可见的,服务器向客户端发送第二视野剔除结果,第二视野剔除结果包括:第二虚拟角色处于第一虚拟角色的视野范围内。其中,客户端用于显示第一虚拟角色所在的虚拟场景,该客户端只能从服务器接收到第一虚拟角色的视野范围内的其它虚拟角色,使得客户端无法使用透视类型外挂,若第一虚拟角色的视野范围内没有出现其它虚拟角色或者出现其它虚拟角色的频率较低,则服务器可以减少向客户端发送游戏数据的频率,从而节省服务器的下行流量。

通过以上实施例对本发明实施例的描述可知,在本发明实施例中,服务器将障碍物投影到第二虚拟角色的投影平面上,得到障碍物在投影平面上的凸多边形,障碍物处于第一虚拟角色和第二虚拟角色之间。服务器对凸多边形进行光栅化处理,以及服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色在投影平面上所占的投影面积。若凸多边形完全覆盖第二虚拟角色的投影面积,服务器将第二虚拟角色从第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,第一视野剔除结果包括:第二虚拟角色从第一虚拟角色的视野范围内剔除。若凸多边形没有完全覆盖第二虚拟角色的投影面积,服务器向客户端发送第二视野剔除结果,第二视野剔除结果包括:第二虚拟角色处于第一虚拟角色的视野范围内。由于本发明实施例中通过服务器一侧为虚拟角色进行视野剔除,服务器向客户端发送视野剔除结果,服务器只需要告知客户端本端的第一虚拟角色的视野内可出现的虚拟角色,从而防止客户端的透视类型外挂。同时本发明实施例中服务器可以对凸多边形进行光栅化处理,而无需再拆分为多个三角形,因此可以提高光栅化的效率,避免光栅化过程所产生的舍入误差。

为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。

本发明实施例中第一虚拟角色的视野剔除不再由客户端来完成,以防止客户端的作弊行为,具体可以由服务器为第一虚拟角色进行视野剔除,视野剔除是指判断某一虚拟角色是否能看到另外的虚拟角色时所采取的判断方式,视野剔除是一个难而重要的部分,在游戏场景中(比如游戏dota)中若客户端一侧开挂就可以看到其他角色,这个会存在客户端作弊的问题,对于其他客户端而言是不公平的。通过服务器一侧进行视野剔除,可以剔除对于虚拟角色不可见的其他角色或者物体,该服务器只向客户端发送处于第一虚拟角色的视野范围内的其它虚拟角色,从而可以很好的实现反透视类型外挂,也能节省大量流量。

现有技术中客户端一侧进行的视野剔除可以由图形处理专用的图形处理器(Graphics Processing Unit,GPU)来完成,但在服务器一般不存在GPU,而且服务器光栅化精度可以和运算效率做适当取舍,因此服务器一侧需要适用于服务器的高效凸多边形光栅化。服务器视野剔除的方案中一个关键部分是凸多边形光栅化的效率,所有充当遮挡物的凸多面体、长方体,通过透视投影或正交投影后都是凸多边形。

请参阅图2所示,为本发明实施例提供的障碍物的投影过程示意图,A和B都是虚拟角色,虚拟角色A用摄像头代表,B用投影平面代表,障碍物在虚拟角色A和虚拟角色B。服务器为虚拟角色A进行视野剔除的原理简述如下:

1、每个虚拟角色有一个投影平面,虚拟角色在投影平面上的投影面积比角色模型大,以补偿服务器和客户端的通信延迟。比如虚拟角色A躲在一个障碍物后面,这时虚拟角色B在自己的客户端看不到虚拟角色A,但虚拟角色B决定绕过障碍物去攻击虚拟角色A。虚拟角色B在自己的客户端走到一个可以看到虚拟角色A的位置时刻,由于网络通信延迟,虚拟角色B在服务器的位置还看不到虚拟角色A,从而造成延迟问题,适当增加角色模型A的投影平面大小,可以让服务器中虚拟角色B更早的看到虚拟角色A,就可以减少服务器和客户端的通信延迟。

2、决定虚拟角色A是否可见虚拟角色B时,可以从虚拟角色A的摄像机向虚拟角色B发射一条或多条射线,如果任意一条射线无障碍物遮挡,则虚拟角色A可见虚拟角色B。

3、如果中间有障碍物,则把所有障碍物通过透视投影或/和正射投影投影到虚拟角色B的投影平面,并把投影光栅化到虚拟角色B的投影网格。

4、如果虚拟角色B的整个投影面积都被障碍物覆盖,则虚拟角色A不可见虚拟角色B,否则可以判定虚拟角色A可见虚拟角色B。另外,为了保证游戏公平性,同时减少计算量,实现了视野的双向性,即如果虚拟角色A能看到虚拟角色B,则虚拟角色B也能看到虚拟角色A。

其中,投影平面的网格大小由A与B的距离和视角参数决定,在相隔比较远,精度降低,减少计算量。在相隔比较近,光栅化处理的精度增加,也会增加判断精度,公式如下:

Grid=Distance×2×tan(α/2)。

通过调整视角参数,可以在计算精度和计算量之间做折中,网格越小,计算精度越高。

本发明实施例中提出了一个高效光栅化凸多边形算法,用于服务器一侧实现的视野剔除,接下来以坐标轴为纵轴y为例进行说明对凸多边形的光栅化处理过程。凸多边形光栅化算法接收凸多边形顶点数组作为输入,顶点可以以顺时针或逆时针排列于数组中。该算法简介如下:

1、找到凸多边形y值最大和最小的两个顶点,分别取名Vymax,Vymin。y值是凸多边形所在平面所建立的二维坐标系的y值,凸多边形在该坐标系表达成二维坐标点序列,例如(0,0),(0,1),(1,0)序列代表了一个三角形。

2、初始化顶点Vcw=Vccw=Vymax,初始化Vcw的后继顶点Vcwn=next(Vcw),初始化Vccw的前向顶点Vccwp=prev(Vccw)。初始化后的标注如图3-a所示,为本发明实施例提供的光栅化处理的扫描算法初始过程示意图。Vcw代表按顺时针遍历的顶点(clockwise),Vccw代表按逆顺时针遍历的顶点(counter-clockwise)。

3、光栅化线段Vcw-Vcwn和线段Vccw-Vccwp的公共部分,如图3-a中的阴影部分为光栅化处理的结果,具体方式为:令Y1=Vccw和Vcw中y值较小者的y值,令Y2=Vccwp和Vcwn中y值较大者的y值,把凸多边形内满足y>=Y2且y<=Y1的点V涂上阴影,作为光栅化处理的结果。

4、比较Vccwp和Vcwn的y值,y值较大者沿着凸多边形的边移动一步,如图3-b所示,为本发明实施例提供的光栅化处理的扫描算法遍历过程示意图。如果Vccw或Vcw等于Vymin,算法结束,否则转入步骤3。如果Vccwp的y值大,如图3-a所示,那么Vccwp和Vccw按逆时针向后走一步,即Vccw=Vccwp,Vccwp=prev(Vccwp),演变成图3-b所示情况,如果Vcwn的y值大,那么Vcwn和Vcw按顺时针向前走一步,即Vcw=Vcwn,Vcwn=next(Vcwn)。

通过前述的举例说明可知,本发明实施例中服务器一侧可以直接光栅化凸多边形,无需把凸多边形拆分成三角形,效率高,也没有因三角形缝隙而产生的舍入误差。因此在把三角形转换成屏幕像素的过程中,即使两个三角形靠得极近,转换成屏幕像素后,仍然有可能看到一条像素缝隙把两个像素三角形分开。另外本发明实施例中提供的光栅化凸多边形的算法可以由CPU执行,运行在服务器端。本方案从纵轴最大顶点向纵轴最小顶点扫描,可以扩展为以横轴最大顶点向横轴最小顶点扫描,也可以分别从最小顶点向最大顶点扫描,根据横轴/纵轴和最大顶点/最小顶点分类,一共有四种扫描方式。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。

请参阅图4-a所示,本发明实施例提供的一种服务器400,可以包括:障碍物投影模块401、光栅化处理模块402、投影判断模块403、视野剔除模块404、发送模块405,其中,

障碍物投影模块401,用于将障碍物投影到第二虚拟角色的投影平面上,得到所述障碍物在所述投影平面上的凸多边形,所述障碍物处于第一虚拟角色和所述第二虚拟角色之间;

光栅化处理模块402,用于对所述凸多边形进行光栅化处理;

投影判断模块403,用于根据光栅化处理的结果确定所述凸多边形是否完全覆盖所述第二虚拟角色在所述投影平面上所占的投影面积;

视野剔除模块404,用于若所述凸多边形完全覆盖所述第二虚拟角色的投影面积,将所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,所述客户端用于显示所述第一虚拟角色所在的虚拟场景,所述第一视野剔除结果包括:所述第二虚拟角色从所述第一虚拟角色的视野范围内剔除;

发送模块405,用于若所述凸多边形没有完全覆盖所述第二虚拟角色的投影面积,向所述客户端发送第二视野剔除结果,所述第二视野剔除结果包括:所述第二虚拟角色处于所述第一虚拟角色的视野范围内。

在本发明的一些实施例中,请参阅图4-b所示,所述服务器400还包括:坐标获取模块406和障碍物判断模块407,其中,

所述坐标获取模块406,用于获取所述第一虚拟角色在虚拟场景内的第一位置坐标;

所述障碍物判断模块407,用于根据所述第一虚拟角色所采用的视角判断从所述第一位置坐标到第二位置坐标之间的直线上是否存在障碍物,所述第二位置坐标是所述第二虚拟角色在所述虚拟场景中的位置坐标;若从所述第一位置坐标到所述第二位置坐标之间的直线上存在障碍物,触发执行所述障碍物投影模块401;

所述发送模块404,还用于若从所述第一位置坐标到所述第二位置坐标之间的直线上不存在障碍物,向所述客户端发送第三视野剔除结果,所述第三视野剔除结果包括:所述第二虚拟角色在所述第一虚拟角色的视野范围内。

在本发明的一些实施例中,所述光栅化处理模块402,具体用于执行如下步骤:

步骤1、获取所述凸多边形的所有顶点的位置坐标;

步骤2、根据坐标轴方向从所述所有顶点的位置坐标中选择出第一坐标值和第二坐标值,所述第一坐标值、所述第二坐标值为根据所述坐标轴方向确定的最大坐标值和最小坐标值,或所述第一坐标值、所述第二坐标值为根据所述坐标轴方向确定的最小坐标值和最大坐标值;

步骤3、从所述第一坐标值开始沿着所述凸多边形的边分别按照顺时针方向和逆时针方向遍历所述凸多边形的各个顶点,在遍历各个顶点的过程中,对遍历后的顶点进行连线后组成的图形进行光栅化,直至最终到达所述第二坐标值时完成光栅化处理。

在本发明的一些实施例中,所述光栅化处理模块402,具体用于执行如下步骤:

步骤31、从所述第一坐标值开始,沿着所述凸多边形的边分别按照顺时针方向和逆时针方向获取到第三坐标值和第四坐标值,所述第三坐标值对应的顶点、所述第四坐标值对应的顶点都与所述第一坐标值对应的顶点相邻;

步骤32、将所述第一坐标值赋值给顺时针当前顶点Vcw,将所述第三坐标值赋值给顺时针下一顶点Vcwn,所述Vcwn=next(Vcw),将所述第一坐标值赋值给逆时针当前顶点Vccw,将所述第四坐标值赋值给逆时针下一顶点Vccwp,所述Vccwp=prev(Vccw);

步骤33、对第一线段和第二线段在所述凸多边形内组成的公共部分进行光栅化处理,所述第一线段包括:所述Vcw对应的顶点和所述Vcwn对应的顶点之间的连线,所述第二线段包括:所述Vccw对应的顶点和所述Vccwp对应的顶点之间的连线;

步骤34、从所述Vcwn和所述Vccwp中选择出与所述第一坐标值之间差值的绝对值最小的坐标值,若所述Vcwn与所述第一坐标值之间差值的绝对值最小,则沿着所述凸多边形的边按照顺时针方向找到第五坐标值,将所述第三坐标值赋值给所述Vcw,将所述第五坐标值赋值给所述Vcwn,然后重新执行步骤33,所述第五坐标值对应的顶点与所述第三坐标值对应的顶点相邻;若所述Vccwp与所述第一坐标值之间差值的绝对值最小,则沿着所述凸多边形的边按照逆时针方向找到第六坐标值,将所述第四坐标值赋值给所述Vccw,将所述第六坐标值赋值给所述Vccwp,然后重新执行步骤33,所述第六坐标值对应的顶点与所述第四坐标值对应的顶点相邻;当所述Vcw和所述Vccw的取值都不等于所述第二坐标值时,重新执行步骤33和步骤34,当所述Vcw或所述Vccw的取值等于所述第二坐标值时完成光栅化处理。

在本发明的一些实施例中,当所述坐标轴方向为纵轴方向时,所述第一坐标值、所述第二坐标值为根据所述纵轴方向确定的最大坐标值和最小坐标值,所述Vcwn和所述Vccwp中与所述第一坐标值之间差值的绝对值最小的坐标值为所述Vcwn和所述Vccwp中取值最大的坐标值;

当所述坐标轴方向为纵轴方向时,所述第一坐标值、所述第二坐标值为根据所述纵轴方向确定的最小坐标值和最大坐标值,所述Vcwn和所述Vccwp中与所述第一坐标值之间差值的绝对值最小的坐标值为所述Vcwn和所述Vccwp中取值最小的坐标值;

当所述坐标轴方向为横轴方向时,所述第一坐标值、所述第二坐标值为根据所述横轴方向确定的最大坐标值和最小坐标值,所述Vcwn和所述Vccwp中与所述第一坐标值之间差值的绝对值最小的坐标值为所述Vcwn和所述Vccwp中取值最大的坐标值;

当所述坐标轴方向为横轴方向时,所述第一坐标值、所述第二坐标值为根据所述横轴方向确定的最大坐标值和最小坐标值,所述Vcwn和所述Vccwp中与所述第一坐标值之间差值的绝对值最小的坐标值为所述Vcwn和所述Vccwp中取值最小的坐标值。

在本发明的一些实施例中,请参阅图4-c所示,所述障碍物投影模块401,包括:

网格划分模块4011,用于将所述第二虚拟角色的投影面积划分为多个投影网格;

网格覆盖判断模块4012,用于根据所述光栅化处理的结果确定所述凸多边形是否完全覆盖所述第二虚拟角色的所有投影网格。

在本发明的一些实施例中,所述投影网格通过如下方式计算网格大小:

Grid=Distance×2×tan(α/2);

其中,所述Grid表示所述投影网格的网格大小,所述Distance表示所述第一虚拟角色和所述第二虚拟角色之间的距离,所述tan表示正切函数符号,所述α表示所述第一虚拟角色的视角参数。

通过以上对本发明实施例的描述可知,在本发明实施例中,服务器首先将障碍物投影到第二虚拟角色的投影平面上,得到障碍物在投影平面上的凸多边形,障碍物处于第一虚拟角色和第二虚拟角色之间。服务器对凸多边形进行光栅化处理,以及服务器根据光栅化处理的结果确定凸多边形是否完全覆盖第二虚拟角色在投影平面上所占的投影面积。若凸多边形完全覆盖第二虚拟角色的投影面积,服务器将第二虚拟角色从第一虚拟角色的视野范围内剔除掉,向客户端发送第一视野剔除结果,第一视野剔除结果包括:第二虚拟角色从第一虚拟角色的视野范围内删除。若凸多边形没有完全覆盖第二虚拟角色的投影面积,服务器向客户端发送第二视野剔除结果,第二视野剔除结果包括:第二虚拟角色处于第一虚拟角色的视野范围内。由于本发明实施例中通过服务器一侧为虚拟角色进行视野剔除,服务器向客户端发送视野剔除结果,服务器只需要告知客户端本端的第一虚拟角色的视野内可出现的虚拟角色,从而防止客户端的透视类型外挂。同时本发明实施例中服务器可以对凸多边形进行光栅化处理,而无需再拆分为多个三角形,因此可以提高光栅化的效率,避免光栅化过程所产生的舍入误差。

图5是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。

服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

上述实施例中由服务器所执行的虚拟角色的视野剔除方法步骤可以基于该图5所示的服务器结构。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1