CN117392358B - 碰撞检测方法、装置、计算机设备和存储介质 - Google Patents

碰撞检测方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN117392358B
CN117392358B CN202311640275.7A CN202311640275A CN117392358B CN 117392358 B CN117392358 B CN 117392358B CN 202311640275 A CN202311640275 A CN 202311640275A CN 117392358 B CN117392358 B CN 117392358B
Authority
CN
China
Prior art keywords
target
collision detection
dynamic virtual
space
virtual object
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311640275.7A
Other languages
English (en)
Other versions
CN117392358A (zh
Inventor
桑琪
徐鹏程
黄晨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311640275.7A priority Critical patent/CN117392358B/zh
Publication of CN117392358A publication Critical patent/CN117392358A/zh
Application granted granted Critical
Publication of CN117392358B publication Critical patent/CN117392358B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Processing Or Creating Images (AREA)

Abstract

本申请涉及一种碰撞检测方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件;获取所述目标动态虚拟物件的空间变换参数;获取所述目标动态虚拟物件在所述初始空间状态下时在所述目标动态虚拟物件的局部空间中的物件层信息;根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线;基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果。采用本方法能够提高交互自由度。

Description

碰撞检测方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种碰撞检测方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术的发展,虚拟场景的应用越来越广泛,虚拟场景包括但不限于是游戏或虚拟现实等场景。虚拟场景中可以允许摆放虚拟物件,例如,虚拟场景中提供了家园的功能,可以在虚拟场景中创建家园,并可以在家园中摆放虚拟物件。
传统技术中,由于摆放的虚拟物件会参与到虚拟场景的碰撞检测中,故摆放的虚拟物件需要符合碰撞检测的方法,从而为了满足碰撞检测方法,通常对虚拟场景中摆放虚拟物件的方法进行限制,例如设置固定的摆放方法,以满足目前的碰撞检测方法。
然而,为了满足碰撞检测方法,而对虚拟场景中摆放虚拟物件的方法进行限制,降低了虚拟场景中的交互自由度。
发明内容
基于此,有必要针对上述技术问题,提供一种能够交互自由度的碰撞检测方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
一方面,本申请提供了一种碰撞检测方法,包括:获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件;获取所述目标动态虚拟物件的空间变换参数;所述空间变换参数表征所述目标动态虚拟物件从初始空间状态变换到当前空间状态的方式;获取所述目标动态虚拟物件在所述初始空间状态下时在所述目标动态虚拟物件的局部空间中的物件层信息;根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线;基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
另一方面,本申请还提供了一种碰撞检测装置,包括:第一物件确定模块,用于获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件;第一参数获取模块,用于获取所述目标动态虚拟物件的空间变换参数;所述空间变换参数表征所述目标动态虚拟物件从初始空间状态变换到当前空间状态的方式;第一信息获取模块,用于获取所述目标动态虚拟物件在所述初始空间状态下时在所述目标动态虚拟物件的局部空间中的物件层信息;射线得到模块,用于根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线;第一结果得到模块,用于基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
另一方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述碰撞检测方法中的步骤。
另一方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
另一方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
上述碰撞检测方法、装置、计算机设备、存储介质和计算机程序产品,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件,获取目标动态虚拟物件的空间变换参数,获取目标动态虚拟物件在初始空间状态下时在目标动态虚拟物件的局部空间中的物件层信息,根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线,基于物件层信息所指示的层中与目标射线相交的层,确定碰撞检测点所对应的单元格空间中的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。从而即便目标动态虚拟物件在虚拟场景中发生了空间状态的变化,在碰撞检测的过程中根据空间变换参数和物件层信息,依然可以得到可靠的碰撞检测结果,故本方法支持动态虚拟物件在虚拟场景中自由变换,提高了虚拟场景中的交互自由度。
一方面,本申请提供了一种碰撞检测方法,包括:获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;获取所述参考动态虚拟物件的空间变换参数;所述空间变换参数表征所述参考动态虚拟物件从初始空间状态变换到当前空间状态的方式;获取所述参考动态虚拟物件在所述初始空间状态下时在所述参考动态虚拟物件的局部空间中的物件层信息;基于所述空间变换参数,将所述参考动态虚拟物件所处世界空间中的所述碰撞检测点变换为所述局部空间中的目标点;根据所述目标点,从所述物件层信息所指示的层中确定所述碰撞检测点对应的单元格空间中的层,获得所述碰撞检测点的碰撞检测结果。
另一方面,本申请还提供了一种碰撞检测装置,包括:第二物件确定模块,用于获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;第二参数获取模块,用于获取所述参考动态虚拟物件的空间变换参数;所述空间变换参数表征所述参考动态虚拟物件从初始空间状态变换到当前空间状态的方式;第二信息获取模块,用于获取所述参考动态虚拟物件在所述初始空间状态下时在所述参考动态虚拟物件的局部空间中的物件层信息;检测点变换模块,用于基于所述空间变换参数,将所述参考动态虚拟物件所处世界空间中的所述碰撞检测点变换为所述局部空间中的目标点;第二结果得到模块,用于根据所述目标点,从所述物件层信息所指示的层中确定所述碰撞检测点对应的单元格空间中的层,获得所述碰撞检测点的碰撞检测结果。
另一方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述碰撞检测方法中的步骤。
另一方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
另一方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
上述碰撞检测方法、装置、计算机设备、存储介质和计算机程序产品,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件,获取参考动态虚拟物件的空间变换参数,获取参考动态虚拟物件在初始空间状态下时在参考动态虚拟物件的局部空间中的物件层信息,基于空间变换参数,将参考动态虚拟物件所处世界空间中的碰撞检测点变换为局部空间中的目标点,根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果。从而即便目标动态虚拟物件在虚拟场景中发生了空间状态的变化,在碰撞检测的过程中根据空间变换参数和物件层信息,依然可以得到可靠的碰撞检测结果,故本方法支持动态虚拟物件在虚拟场景中自由变换,提高了虚拟场景中的交互自由度。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中碰撞检测方法的应用环境图;
图2为一个实施例中碰撞检测方法的流程示意图;
图3为一个实施例中形状不规则的虚拟物件的示意图;
图4为一个实施例中形状规则的虚拟物件的示意图;
图5为一个实施例中对动态虚拟物件进行旋转的界面图;
图6为一个实施例中对动态虚拟物件进行缩放的界面图;
图7为一个实施例中单元格空间中的各层的示意图;
图8为一个实施例中虚拟场景分层的示意图;
图9为一个实施例中场景树的示意图;
图10为一个实施例中根据获取高度信息的示意图;
图11为一个实施例中确定碰撞检测物件的示意图;
图12为另一个实施例中碰撞检测方法的流程示意图;
图13为一个实施例中平面区域的示意图;
图14为一个实施例中虚拟场景对应的动态虚拟物件存储结构的示意图;
图15为另一个实施例中碰撞检测方法的流程示意图;
图16为一个实施例中基于体素碰撞的系统架构图;
图17为一个实施例中生成的虚拟场景画面的示意图;
图18为一个实施例中碰撞检测装置的结构框图;
图19为一个实施例中碰撞检测装置的结构框图;
图20为一个实施例中计算机设备的内部结构图;
图21为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的碰撞检测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。
具体地,终端102和服务器104可以分别进行碰撞检测,服务器可以将生成的碰撞检测结果发送至终端,终端生成碰撞检测结果后,采用来自于服务器的碰撞检测结果对终端生成的碰撞检测结果进行校验,在校验通过的情况下,采用终端的碰撞检测结果进行后续处理,在校验失败的情况下,采用服务器的碰撞检测结果进行后续处理。终端102和服务器104可以分别采用不同的方法进行碰撞检测,具体如下:
终端102可以获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件。终端102获取目标动态虚拟物件的空间变换参数,空间变换参数表征目标动态虚拟物件从初始空间状态变换到当前空间状态的方式。终端102获取目标动态虚拟物件在初始空间状态下时在目标动态虚拟物件的局部空间中的物件层信息。物件层信息,指示目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,层表征目标动态虚拟物件在单元格空间中占用的空间。终端102根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线。终端102基于物件层信息所指示的层中与目标射线相交的层,确定碰撞检测点所对应的单元格空间中的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。
服务器104获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件。服务器104获取参考动态虚拟物件的空间变换参数;空间变换参数表征参考动态虚拟物件从初始空间状态变换到当前空间状态的方式。服务器104获取参考动态虚拟物件在初始空间状态下时在参考动态虚拟物件的局部空间中的物件层信息。物件层信息,指示参考动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,层表征参考动态虚拟物件在单元格空间中占用的空间。服务器104基于空间变换参数,将参考动态虚拟物件所处世界空间中的碰撞检测点变换为局部空间中的目标点。服务器104根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果。
其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现,还可以是云服务器,云服务器用于提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务。终端102以及服务器104可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。终端可以理解为客户端,服务器可以理解为服务端。
在一些实施例中,如图2所示,提供了一种碰撞检测方法,该方法可以由终端或服务器执行,还可以由终端和服务器共同执行,以该方法应用于图1中的终端102为例进行说明,包括以下步骤202至步骤210。其中:
步骤202,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件。
其中,虚拟场景是应用程序在终端上运行时显示(或提供)的虚拟的场景。该虚拟场景可以是对真实世界的仿真环境场景,也可以是半仿真半虚构的三维环境场景,还可以是纯虚构的三维环境场景。虚拟场景包括但不限于是游戏或VR(Virtual Reality,虚拟现实)等场景,例如虚拟场景可以是整个游戏场景,也可以是游戏场景中的部分场景,例如,游戏场景中可以存在多个相互独立的场景,每个独立的场景可以称为一个位面,虚拟场景可以是游戏场景中的任一独立的场景,即任一位面。例如,虚拟场景可以是游戏中的家园系统。游戏中的家园系统是一个允许玩家个性化和定制的虚拟空间,让玩家在游戏中拥有一个属于自己的“家”。其中建筑与设计是家园最主要的玩法,玩家可以根据自己的喜好建造和布置家园,如选择建筑风格、颜色、家具摆设等。
虚拟场景中存在虚拟角色和虚拟物件,虚拟角色可以在虚拟场景中移动。虚拟物件的形状可以规则的也可以不规则的,例如,虚拟物件可以是任意不规则形状的,如图3所示,展示了形状不规则的虚拟物件。虚拟物件也可以是长方体,形状规则的虚拟物件包括但不限于是桌子、箱子、台阶或毯子中的至少一种,如图4所示,展示了形状规则的虚拟物件。虚拟物件可以是任意类型的物件,例如可以是虚拟的家具、虚拟的建筑物或虚拟的植物等。虚拟场景中可以存在动态虚拟物件,动态虚拟物件是指空间状态在虚拟场景中可发生变换的虚拟物件,例如,动态虚拟物件是空间状态可被虚拟角色改变的虚拟物件。动态虚拟物件可以是虚拟角色添加至虚拟场景中的,也可以是虚拟场景中默认存在的虚拟物件。虚拟角色可以对动态虚拟物件进行空间变换,空间变换包括缩放或旋转中的至少一种。当然,虚拟角色该可以对动态虚拟物件进行拖动。目标动态虚拟物件是用于参与碰撞检测的动态虚拟物件。碰撞检测点是虚拟场景中需要进行碰撞检测的点。
具体地,在虚拟场景中存在虚拟角色的情况下,终端可以对虚拟角色的移动的路线进行预测,得到移动路线。由于虚拟角色在虚拟场景中是可以移动的,虚拟角色的移动可以是被玩家控制的。终端响应于针对虚拟角色的移动操作,确定虚拟角色移动的方向和速度,根据虚拟角色当前的位置、移动的方向和速度生成多个路线点得到参考移动路线,参考移动路线包括该多个路线点。终端得到参考移动路线后,可以将每个路线点分别作为碰撞检测点。
在一些实施例中,虚拟场景所处的空间为世界空间。世界空间(World Space)是指虚拟场景所在的三维立体空间。世界空间中预设平面上分布有二维网格,该二维网格可以称为全局二维网格,二维网格中的每个格子可以称为单元格(grid),全局二维网格中的每个格子可以称为全局单元格。该预设平面可以根据需要设置,例如预设平面可以是虚拟场景中的地平面,若世界空间中XOY平面为地平面,则预设平面可以是XOY平面。终端将碰撞检测点投影到世界空间中的该预设平面上,得到碰撞检测点在预设平面上的投影点,确定碰撞检测点在预设平面上的投影点所属的全局单元格。然后,终端从影点所属的全局单元格发射一条射线,从虚拟场景中获取与该射线相交的动态虚拟物件,得到目标动态虚拟物件。
步骤204,获取目标动态虚拟物件的空间变换参数;空间变换参数表征目标动态虚拟物件从初始空间状态变换到当前空间状态的方式。
其中,动态虚拟物件的空间状态可以用动态虚拟物件的朝向和尺寸等表征。当前空间状态,是指目标动态虚拟物件当前在虚拟场景中呈现的空间状态。当前空间状态是根据空间变换参数对目标动态虚拟物件的初始空间状态进行变换得到的。空间变换参数包括但不限于是旋转的角度、缩放系数等中的至少一个。初始空间状态是预设的一种空间状态。
空间变换操作包括但不限于是旋转或缩放中的至少一个。动态虚拟物件的空间变换操作可以是预先规定的。例如,可以通过根据动态虚拟物件的形状,来确定动态虚拟物件的空间变换操作。例如,若动态虚拟物件的形状是规则的,则规定动态虚拟物件的空间变换操作可以包括绕Z轴进行任意角度的旋转、在X轴、Y轴或Z轴方向上进行任意缩放中的至少一种。对于形状规则的动态虚拟物件,空间变换操作包括绕X轴、Y轴、Z轴进行任意角度的旋转、在X轴、Y轴或Z轴方向上进行任意缩放中的至少一种。
具体地,终端响应于向虚拟场景中添加动态虚拟物件,响应于针对该动态虚拟物件的空间变换操作,获取该空间变换操作所对应的参数得到空间变换参数,并存储该动态虚拟物件的空间变换参数。若动态虚拟场景呈现的空间状态即当前空间状态与初始空间状态一致,则空间变化参数可以均为0。故终端中存储有目标动态虚拟物件的空间变换参数。
在一些实施例中,终端提供了对动态虚拟物件进行空间变换的功能,如图5所示,展示了终端提供的对动态虚拟物件进行旋转的界面图。如图6所示,展示了终端提供的对动态虚拟物件进行缩放的界面图。
步骤206,获取目标动态虚拟物件在初始空间状态下时在目标动态虚拟物件的局部空间中的物件层信息。
其中,动态虚拟物件可以是形状规则的,也可以是形状不规则的。终端可以预先为形状不规则的动态虚拟物件生成物件层信息。即在进行碰撞检测之前,动态虚拟物件的物件层信息已生成并存储在终端中。物件层信息,指示目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,层表征目标动态虚拟物件在单元格空间中占用的空间。参考平面采用局部空间的坐标系来表示,若将参考平面采用世界空间的坐标系表示,则参考平面与预设平面是平行的,即将局部空间转换到世界空间后所得到的平面与预设平面平行。单元格空间是指以单元格为横界面延伸出的柱子。单元格空间中的层的数量是有限的,例如,规定单元格空间中层的数量不大于数量阈值,数量阈值可以根据需要设置,例如可以为8或10等,以数量阈值为8为例,则可以采用1个字节存储单元格对应的单元格空间中的层。如图7所示,展示了单元格延伸形成的单元格空间中的各层,虚线代表的柱子是指单元格空间,实线部分代表层,可以看出该单元格空间中只有4层,1个字节中的每位对应一个层,若层存在则对应位设置为1,若层不存在则对应位设置为0。
具体地,终端可以在目标动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格。局部二维网格中的单元格可以称为局部单元格。全局单元格和局部单元格的尺寸是相同的,例如均是根据体素的尺寸确定的。体素(Volum Pixel,Voxel)的概念是从二维空间的最小单位像素衍伸而来。像素用于描述二维的影像,是二维空间上的最小单位。而体素则可以用于描述三维空间上的立体的物件,是三维空间分割上的最小单位。例如,单元格(全局单元格和局部单元格)的长度为体素的长度,单元格的宽度为体素的宽度。例如,体素的大小为0.5米×0.5米×0.5米,则单元格的尺寸为0.5米×0.5米。由于物件层信息,指示目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,层表征目标动态虚拟物件在单元格空间中占用的空间。因此,是以单元格为最小单位来生成物件层信息的,而单元格是根据体素的大小决定的,故生成物件层信息的过程也可以称为体素化的过程。目标动态虚拟物件所处的局部空间,是以目标动态虚拟物件的中心位置或者起始位置为原点构建的三维立体空间。目标动态虚拟物件在其局部空间中的状态为初始空间状态。
在一些实施例中,终端确定处于初始空间状态的目标动态虚拟物件在参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格。针对每个目标局部单元格,终端可以基于从目标局部单元格发出的射线和目标动态虚拟物件,生成目标局部单元格对应的单元格层信息,例如,终端可以获取射线穿入目标动态虚拟物件时的高度以及射线穿出目标动态虚拟物件时的高度,得到各高度,根据各高度生成目标局部单元格对应的单元格层信息。终端可以将各目标局部单元格对应的单元格层信息构成目标动态虚拟物件的物件层信息。物件层信息包括各目标局部单元格对应的单元格层信息。单元格层信息包括层的高度,例如包括层的上边界高度或层的下边界高度,层的上边界高度是层的最大的高度,层的下边界高度是层的最小的高度。
步骤208,根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线。
其中,修正是指根据空间变换参数对射线进行变换,并将变换后所得到的射线从世界空间转变到局部空间中。
具体地,终端可以确定碰撞检测点在虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格。全局单元格是指全局二维网格中的单元格,全局二维网格是在预设平面上分布的二维网格。终端可以基于目标全局单元格生成第二射线。第二射线从目标全局单元格发出且垂直于预设平面。
在一些实施例中,终端可以根据空间变换参数对第二射线进行反向变换。反向变换是与正向变换相反的变换,正向变换是指根据空间变换参数对目标动态虚拟物件进行的变换。终端可以将反向变换后所得到的射线转换为局部空间中的目标射线。
步骤210,基于物件层信息所指示的层中与目标射线相交的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。
其中,碰撞检测点所对应的单元格空间,是指碰撞检测点对应的全局单元格所对应的单元格空间。碰撞检测点对应的全局单元格,是指碰撞检测点在预设平面上的投影位置所属的全局单元格。
物件层信息中包括多个目标局部单元格分别对应的单元格层信息。单元格层信息表征指示一个层,例如,单元格层信息中包括3个层各自的高度信息,高度信息中包括上边界高度或下边界高度中的至少一个。
具体地,针对每个碰撞检测点,可以对应有一个或多个用于参与碰撞检测的目标动态虚拟物件。多个是指至少两个。且目标动态虚拟物件的形状可以是规则的,也可以是不规则的。针对多个目标动态虚拟物件中的每个目标动态虚拟物件,若目标动态虚拟物件的形状不规则,则终端根据该目标动态虚拟物件的空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线,基于物件层信息所指示的层中与目标射线相交的层,得到该目标动态虚拟物件确定出的层;若目标动态虚拟物件的形状规则,则终端获取目标动态虚拟物件与经过碰撞检测点的射线的各交点,得到各目标交点,根据各目标交点得到该目标动态虚拟物件确定出的层。得到各个目标动态虚拟物件分别确定出的层之后,基于各个目标动态虚拟物件分别确定出的层,得到碰撞检测点所对应的单元格空间中的各层。
在一些实施例中,虚拟场景中还存在动态虚拟物件之外的虚拟物件,例如,虚拟场景中还存在不可被角色改变的虚拟物件。终端中可以存储有全局单元格对应的初始层信息,初始层信息指示虚拟场景中的动态虚拟物件之外的虚拟物件在该全局单元格的单元格空间中产生的层。终端可以根据各个目标动态虚拟物件分别确定出的层、碰撞检测点所对应的单元格的初始层信息表征的层,得到层集合,根据层集合得到碰撞检测点所对应的单元格空间中的各层。例如,终端可以将层集合中的各层,作为碰撞检测点所对应的单元格空间中的各层。或者,针对层集合中的任意相邻的两层,若该相邻的两层之间的距离小于距离阈值,则将这两层合并为一层,生成合并后的层,并将未参与合并的层以及合并后的层,作为碰撞检测点所对应的单元格空间中的各层。距离阈值可以根据需要设置,例如可以根据虚拟角色的身高决定,例如,距离阈值的大小可以与虚拟角色的身高的大小一致。
上述碰撞检测方法中,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件,获取目标动态虚拟物件的空间变换参数,获取目标动态虚拟物件在初始空间状态下时在目标动态虚拟物件的局部空间中的物件层信息,根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线,基于物件层信息所指示的层中与目标射线相交的层,确定碰撞检测点所对应的单元格空间中的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。从而即便目标动态虚拟物件在虚拟场景中发生了空间状态的变化,在碰撞检测的过程中根据空间变换参数和物件层信息,依然可以得到可靠的碰撞检测结果,故本方法支持动态虚拟物件在虚拟场景中自由变换,提高了虚拟场景中的交互自由度。
另外,由于故本方法支持动态虚拟物件在虚拟场景中自由变换,从而可以在虚拟场景中快速对动态虚拟物件进行变换从而得到所需的效果,提高了在虚拟场景中的交互效率。
本申请提供的碰撞检测方法,由于是基于物件层信息进行碰撞检测的,因此,当动态虚拟物件之间存在重叠或者动态虚拟物件呈现浮空状态的情况下,均可以正确的得到碰撞检测结果,从而本申请提供的碰撞检测方法还支持动态虚拟物件重叠和浮空、支持虚拟角色在虚拟场景中的动态虚拟物件上行走和站立,进一步提高了虚拟场景中的交互自由度。由于各单元格空间中分层的,故虚拟场景整体上也是分层的,如图8所示,展示了虚拟场景中的部分场景,该部分场景中无填充的矩形整体上形成一层,该部分场景中有填充的矩形整体上形成另一层。
在一些实施例中,方法还包括:在目标动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格;确定处于初始空间状态的目标动态虚拟物件在参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格;针对每个目标局部单元格,基于从目标局部单元格发出的射线和目标动态虚拟物件,生成目标局部单元格对应的单元格层信息;根据各目标局部单元格对应的单元格层信息,生成目标动态虚拟物件的物件层信息。
其中,物件层信息包括各目标局部单元格对应的单元格层信息。目标局部单元格对应的单元格层信息,指示目标局部单元格所延伸形成的单元格空间中的层,单元格空间中的层表征目标动态虚拟物件在单元格空间中占用的空间。
具体地,终端可以将目标动态虚拟物件向参考平面进行投影,得到目标动态虚拟物件在参考平面上的投影区域,并确定投影区域中包括的局部单元格,将投影区域中包括的每个局部单元格,分别作为目标局部单元格。
在一些实施例中,终端可以确定从目标局部单元格发出的射线,穿入目标动态虚拟物件时的高度以及第一射线穿出目标动态虚拟物件时的高度,根据各高度生成目标局部单元格对应的单元格层信息。
本实施例中,生成目标局部单元格对应的单元格层信息,根据各目标局部单元格对应的单元格层信息,生成目标动态虚拟物件的物件层信息,从而物件层信息中包括各目标局部单元格对应的单元格层信息,从而可以根据物件层信息,确定碰撞检测点所对应的单元格空间中的层。
在一些实施例中,基于从目标局部单元格发出的射线和目标动态虚拟物件,生成目标局部单元格对应的单元格层信息,包括:基于目标局部单元格生成第一射线;第一射线从目标局部单元格发出且与参考平面垂直;获取第一射线穿入目标动态虚拟物件时的高度以及第一射线穿出目标动态虚拟物件时的高度,得到各高度;获取各高度的标签;每个高度的标签为第一预设标签或第二预设标签中的一个,第一预设标签,表征穿入目标动态虚拟物件,第二预设标签,表征穿出目标动态虚拟物件;根据各高度的标签,生成目标局部单元格对应的单元格层信息。
具体地,终端可以从目标局部单元格的中心点发射第一射线。终端可以将目标局部单元格的中心点作为第一射线的起点。参考平面可以具有法线,第一射线的方向与参考平面的法线的方向平行。参考平面的法线的方向代表参考平面的正面的朝向。第一预设标签与第二预设标签不同,第一预设标签例如可以用down表示,第二预设标签例如可以用up表示。当然,第一预设标签和第二预设标签可以用数值表示,例如第一预设标签用0表示,第二预设标签用1表示。第一预设标签表示穿入目标动态虚拟物件。第二预设标签表示穿出目标动态虚拟物件。
在一些实施例中,终端可以确定第一射线穿入目标动态虚拟物件时与目标动态虚拟物件的交点,得到各穿入交点,获取穿入交点到预设平面的距离,得到第一射线穿入目标动态虚拟物件时的高度。终端可以确定第一射线穿出目标动态虚拟物件时与目标动态虚拟物件的交点,得到各穿出交点,获取穿出交点到预设平面的距离,得到第一射线穿出目标动态虚拟物件时的高度。
在一些实施例中,终端可以按照高度从小到大的顺序,对各高度进行排列,生成高度序列。终端初始化计算参数,计算参数的初始值为0,遍历高度序列,且在遍历到的高度具有第一预设标签时,将计算参数加1,在遍历到的高度具有第二预设标签时,将计算参数减1,当计算参数减为0时,将计算参数减为0时遍历至的高度作为层的上边界高度,将首个高度作为层的下边界高度,生成一个层信息,该层信息表征一个层。终端继续遍历高度序列,若计算参数再一次减为0,则将前一次计算参数减为0时遍历到的高度的下一个高度作为层的下边界高度,将本次计算参数减为0时遍历到的高度作为层的上边界高度,生成一个层信息,依次类推,直到遍历高度序列为止,生成至少一个层信息。例如高度序列为[H0、H1、H2、H3、H4、H5],且H0、H1、H2、H3、H4、H5的标签依次为down、up、down、down、up、up,则遍历至H1时计算参数减为0,故将H0作为下边界高度,将H1作为上边界高度,生成一个层信息。且在遍历至H5时计算参数减为0,故将H2作为下边界高度,将H5作为上边界高度,生成一个层信息。终端将生成的各个层信息构成目标局部单元格对应的单元格层信息。
本实施例中,由于第一预设标签,表征穿入目标动态虚拟物件,第二预设标签,表征穿出目标动态虚拟物件,从而根据各高度的标签可以准确的生成目标局部单元格对应的单元格层信息。
在一些实施例中,根据各高度的标签,生成目标局部单元格对应的单元格层信息,包括:按照从小到大的顺序对各高度进行排列,生成高度序列;从高度序列中确定目标高度;目标高度的标签为第二预设标签,且目标高度的下一高度的标签为第一预设标签;在目标高度和目标高度的下一高度之间,将高度序列切分得到多个高度子序列;针对每个高度子序列,将高度子序列中起始高度作为层的下边界高度,并将高度子序列中终止高度作为层的上边界高度,生成高度子序列对应的层信息;根据每个高度子序列对应的层信息得到目标局部单元格对应的单元格层信息。
具体地,高度序列中可以存在至少一个目标高度,或者,高度序列中也可以不存在目标高度。终端从高度序列中查找目标高度,针对查找到的每个目标高度,在目标高度和目标高度的下一高度之间,将高度序列切分得到多个高度子序列。例如,高度序列为[H0、H1、H2、H3、H4、H5],且H0、H1、H2、H3、H4、H5的标签依次为down、up、down、down、up、up,则由于H1的标签为up即第二预设标签,H2的标签为down即第一预设标签,故H1为目标高度。由于高度序列中仅存在1个目标高度,故将高度序列切分为两个高度子序列,分别为[H0、H1]和[H2、H3、H4、H5]。
在一些实施例中,在目标高度和目标高度的下一高度之间的高度差大于或等于预设的高度差阈值的情况下,在目标高度和目标高度的下一高度之间,对高度序列进行切分。在目标高度和目标高度的下一高度之间的高度差小于预设的高度差阈值的情况下,不执行步骤:在目标高度和目标高度的下一高度之间,对高度序列进行切分。高度差阈值可以根据需要设置,例如,由于虚拟角色不能通过高度比自身高度小的空间,故可以根据虚拟角色的高度确定高度差阈值,例如,若虚拟角色的高度为2米,则可以将高度差阈值设置为2米。
在一些实施例中,当高度序列中不存在目标高度,将高度序列中的起始高度作为层的下边界高度,并将高度序列中的终止高度作为层的上边界高度,生成目标局部单元格对应的单元格层信息。即当高度序列中不存在目标高度,目标局部单元格仅对应有一层。
本实施例中,在目标高度和目标高度的下一高度之间,将高度序列切分得到多个高度子序列,针对每个高度子序列,将高度子序列中起始高度作为层的下边界高度,并将高度子序列中终止高度作为层的上边界高度,生成高度子序列对应的层信息,根据每个高度子序列对应的层信息得到目标局部单元格对应的单元格层信息,从而准确的得到了单元格层信息。
在一些实施例中,根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件,包括:确定碰撞检测点在虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格;全局单元格是指全局二维网格中的单元格,全局二维网格是在预设平面上分布的二维网格;基于目标全局单元格生成第二射线;第二射线从目标全局单元格发出且垂直于预设平面;从虚拟场景中获取与第二射线相交的动态虚拟物件,得到用于参与碰撞检测的目标动态虚拟物件。
其中,参考平面与预设平面平行。第二射线的起点位于目标全局单元格中。例如第二射线的起点为目标全局单元格的中心点,或者,第二射线的起点可以为碰撞检测点在预设平面上的投影点。第二射线垂直于预设平面。
具体地,终端可以存储有虚拟场景中存在的各个动态虚拟物件的包围盒。终端可以从各个动态虚拟物件的包围盒中,获取与第二射线相交的包围盒,得到目标包围盒,将目标包围盒所属的动态虚拟物件,确定为目标动态虚拟物件。例如,动态虚拟物件1的包围盒与第二射线相交,则将动态虚拟物件1确定为目标动态虚拟物件。
在一些实施例中,终端可以初始化虚拟场景的场景树,场景树中每个节点分别对应有空间,场景树中的根节点对应的空间为世界空间,初始化时生成的场景树中仅包括根节点。终端可以依次将虚拟场景中各动态虚拟物件加入到场景树中,且针对每个动态虚拟物件,从场景树中各节点对应的空间中,确定包括动态虚拟物件的包围盒的最小空间,将动态虚拟物件的包围盒存储至最小空间对应的节点中,并当场景树中任一目标节点包括的包围盒的数量达到预设数量,则为该目标节点生成预设数量个子节点,并将目标节点对应的空间均分为预设数量个子空间,子节点与子空间一一对应,且针对目标节点中存储的每个包围盒,若子空间可以完整包括该包围盒,则将该包围盒存储至该子空间对应的子节点,若各子空间均不能完整的包括该包围盒,则该包围盒保留在目标节点中,从而更新场景树。预设数量可以根据需要设置,例如可以为2、4或8等。例如,场景树可以是八叉树。
如图9所示,展示了场景树的示意图,场景树包括三层。图中空心圆圈代表的节点中不存在包围盒。实心圆圈代表的节点中存在包围盒。每个节点的子节点的数量为0或8。第一层只有一个根节点,第二层有根节点的八个子节点,第三层是第二层中2个节点的子节点。根节点对应的世界空间例如为图9中的(b)所示,(c)代表对世界空间均分为8份的结果,这8份中有2份实线代表的空间,这2份实线代表的空间是包括包围盒的空间,即这2份实线代表的空间为(a)中2个实心圆圈代表的节点分别对应的空间。(d)代表对(c)中的2份实线代表的空间进行均分得到的结果。
以场景树为八叉树为例,如图10所示,从输入坐标向上对八叉树发射射线,是指从目标全局单元格发射第二射线,收集与射线相交的各动态虚拟物件,是指从八叉树中获取与该第二射线相交的动态虚拟物件,得到用于参与碰撞检测的各目标动态虚拟物件。合并输入坐标上的高度信息,是指将各目标动态虚拟物件得到的层的高度信息与前面已提到的初始层信息进行合并,生成该目标全局单元格的层。
本实施例中,从虚拟场景中获取与第二射线相交的动态虚拟物件,得到用于参与碰撞检测的目标动态虚拟物件,提高了目标动态虚拟物件的准确度。
在一些实施例中,根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线,包括:根据空间变换参数对第二射线进行反向变换;反向变换是与正向变换相反的变换,正向变换是指根据空间变换参数对目标动态虚拟物件进行的变换;将反向变换后所得到的射线,转换为局部空间中的目标射线。
其中,反向变换是指与目标动态虚拟物件相反的变换。例如,空间变换参数包括绕Z轴顺时针旋转30度、X轴方向上放大2倍,则反向变换为绕Z轴逆时针旋转30度、X轴方向上缩小1/2。
具体地,终端根据空间变换参数对第二射线进行反向变换,得到变换后的射线,再将变换后的射线由采用世界空间中的坐标系表示,变为采用目标动态虚拟物件的局部空间中的坐标系进行表示,得到在局部空间中的目标射线。
本实施例中,根据空间变换参数对第二射线进行反向变换,将反向变换后所得到的射线,转换为局部空间中的目标射线,从而得到的射线可以用于获取碰撞检测点所对应的单元格空间中的层。
在一些实施例中,碰撞检测点对应有多个目标动态虚拟物件,多个目标动态虚拟物件中包括至少一个形状规则的目标动态虚拟物件和至少一个形状不规则的目标动态虚拟物件,物件层信息是在目标动态虚拟物件为不规则形状情况下获取的;基于物件层信息所指示的层中与目标射线相交的层,获得碰撞检测点在虚拟场景中的碰撞检测结果,包括:针对形状不规则的目标动态虚拟物件,基于物件层信息所指示的层中与目标射线相交的层,得到目标层;物件层信息所指示的层,是指目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成的单元格空间中的层,单元格空间中的层表征目标动态虚拟物件在单元格空间中占用的空间;获取形状规则的目标动态虚拟物件与经过碰撞检测点的射线的各交点,得到各目标交点;根据各目标层和各目标交点,确定碰撞检测点所对应的单元格空间中的各层;基于碰撞检测点所对应的单元格空间中的各层,获得碰撞检测点在虚拟场景中的碰撞检测结果。
其中,形状规则的目标动态虚拟物件可以是长方体形状的目标动态虚拟物件,长方体包括立方体,立方体属于特殊的长方体。形状不规则的目标动态虚拟物件可以是长方体之外的任意形状的目标动态虚拟物件。形状不规则的动态虚拟物件具有物件层信息,而形状规则的动态虚拟物件不具有物件层信息。
具体地,针对形状不规则的目标动态虚拟物件,终端从该形状不规则的目标动态虚拟物件的物件层信息所指示的层中,获取与目标射线相交的层得到目标层。形状不规则的目标动态虚拟物件的空间变换操作不包括X轴方向的旋转以及Y轴方向的旋转,第二射线垂直于预设平面(XOY平面),故目标射线在局部空间中也垂直于参考平面即XOY平面,故终端可以确定目标射线在参考平面上的投影点所属的局部单元格,获取目标射线在参考平面上的投影点所属的局部单元格的单元格层信息表征的各层,得到与目标射线相交的层,即得到目标层。
在一些实施例中,经过碰撞检测点的射线是指上述的第二射线。针对形状规则的目标动态虚拟物件,终端获取第二射线与该形状规则的目标动态虚拟物件的各交点,得到各目标交点。由于射线穿过长方体时,会与长方体有2个交点,故第二射线与该形状规则的目标动态虚拟物件的交点也未2个,故存在2个目标交点。
在一些实施例中,终端可以获取各目标交点的高度,目标交点的高度即目标交点到预设平面的距离,生成以高度较大的目标交点作为上边界高度、且以高度较小的目标交点作为下边界高度的层,得到该单元格空间中由形状规则的目标动态虚拟物件产生的层。
在一些实施例中,终端可以将各目标层和各形状规则的目标动态虚拟物件产生的层,作为碰撞检测点所对应的单元格空间中的各层。或者,虚拟场景中还存在处动态虚拟物件之外的其他的虚拟物件,碰撞检测点所对应的单元格空间中还可以存在由至少一个其他的虚拟物件产生的层,故终端可以将该单元格空间中由至少一个其他的虚拟物件产生的层、各目标层、该单元格空间中由各形状规则的目标动态虚拟物件产生的层,作为碰撞检测点所对应的单元格空间中的各层。
在一些实施例中,终端可以将该单元格空间中由至少一个其他的虚拟物件产生的层、各目标层、该单元格空间中由各形状规则的目标动态虚拟物件产生的层中,距离小于距离阈值的层进行合并,生成新的层,将该新的层和未参与合并的层,作为碰撞检测点所对应的单元格空间中的各层。该新的层中,以参与合并的层的上边界高度中较大的一个作为上边界高度,以参与合并的层的下边界高度中较小的一个作为下边界高度。例如一个层为[H1,H2],另一个层为[H3,H4],H2与H3之间的距离小于距离阈值,且层[H1,H2]位于层[H3,H4]之下,则生成新的层[H1,H4]。
在一些实施例中,在虚拟场景中存在虚拟角色的情况下,终端可以对虚拟角色的移动的路线进行预测,得到移动路线。终端响应于针对虚拟角色的移动操作,确定虚拟角色移动的方向和速度,根据虚拟角色当前的位置、移动的方向和速度生成多个路线点得到参考移动路线,参考移动路线包括该多个路线点。终端得到参考移动路线后,可以将每个路线点分别作为碰撞检测点。终端可以获取碰撞检测点在世界空间中的高度,碰撞检测点在世界空间中的高度即碰撞检测点到预设平面(XOY平面)的距离。终端可以将碰撞检测点在世界空间中的高度与碰撞检测点所对应的单元格空间中的各层的高度进行比对,在根据比对结果确定碰撞检测点,位于碰撞检测点所对应的单元格空间中的任一层内的情况下,确定碰撞检测点在虚拟场景中的碰撞检测结果为存在碰撞。
本实施例中,根据各目标层和各目标交点,确定碰撞检测点所对应的单元格空间中的各层,从而,不论碰撞检测点对应的多个目标动态虚拟物件是否形状规则,都可以得到碰撞检测点所对应的单元格空间中的各层,从而快速得到碰撞检测结果。
在一些实施例中,空间变换参数中包括目标方向上的缩放参数,目标方向是指在在世界空间下从碰撞检测点所对应的单元格发出的射线的方向;基于物件层信息所指示的层中与目标射线相交的层,得到目标层,包括:从物件层信息所指示的层中获取与目标射线相交的层,得到相交层;根据缩放参数对各相交层进行缩放处理,得到目标层。
具体地,由于目标动态虚拟物件的物件层信息,是根据局部空间中初始空间状态的目标动态虚拟物件生成的。故物件层信息表征的层所具有的高度,是由初始空间状态的目标动态虚拟物件的高度决定的,而当目标动态虚拟物件的高度在虚拟场景中被改变的话,则从物件层信息所指示的层中获取层之后,也需要对获取的层的高度进行改变,从而才可以反映出虚拟场景中目标动态虚拟物件在碰撞检测点所对应的单元格空间中产生的真实的层。
在一些实施例中,空间变换参数中包括目标方向上的缩放参数,目标方向是指在在世界空间下从碰撞检测点所对应的单元格发出的射线的方向,预设平面为XOY平面,目标方向为Z轴的正方向,缩放参数则为在Z轴方向上的缩放参数。缩放参数用于在目标方向上对目标动态虚拟物件进行缩小或放大,当缩放参数小于1时,则用于缩小,当缩放参数大于1时,则用于放大。在根据空间变换参数与目标动态虚拟物件进行变换的过程中,终端可以将目标动态虚拟物件中的点在目标方向上的坐标与缩放参数相乘,从而实现对目标动态虚拟物件在目标方向上的缩放,例如缩放参数为2,则实现对目标动态虚拟物件在Z轴方向上放大2倍。从而,为了反映出虚拟场景中目标动态虚拟物件在碰撞检测点所对应的单元格空间中产生的真实的层,终端从物件层信息所指示的层中获取与目标射线相交的层,得到相交层,并将相交层的上边界高度和下边界高度分别与缩放参数相乘,得到缩放后的上边界高度和缩放后的下边界高度,将缩放后的上边界高度和缩放后的下边界高度表征的层作为目标层。
本实施例中,从物件层信息所指示的层中获取与目标射线相交的层,得到相交层,根据缩放参数对相交层进行缩放处理得到目标层,从而准确得到了目标层。
在一些实施例中,方法还包括:响应于在虚拟场景中触发的物件操作,获取物件操作的位置得到操作位置;根据操作位置从虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件;基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,得到操作位置的碰撞检测结果;在碰撞检测结果为发生碰撞的情况下,针对碰撞检测物件执行物件操作。
其中,若物件操作是由鼠标触发的,则物件操作的位置可以为投影空间中鼠标的位置。物件操作是针对虚拟场景中的动态虚拟物件的操作,包括但不限于是拾取动态虚拟物件的操作。
具体地,终端获取鼠标在屏幕空间中的位置,将鼠标在屏幕空间中的位置转换到投影空间中,得到鼠标在投影空间中的位置,将鼠标在投影空中的位置作为物件操作的位置,得到操作位置。其中,投影空间是用来将观察空间中的对象进行投影变换。投影空间中两条平行线在无穷远处交于一点。用来将观察空间中的对象进行投影变换。在这个空间里,可见的范围进行限制。屏幕空间(Screnn Space)是指屏幕的二维空间,屏幕空间的大小为屏幕的大小,以像素为单位。观察空间也叫摄像机空间,可以理解为是以摄像机的位置为原点建立的坐标系代表的空间。
在一些实施例中,终端可以从虚拟场景的观察位置向操作位置发射射线,得到观察射线,根据观察射线与虚拟场景中的至少一个动态虚拟物件的包围盒之间的关系,确定碰撞检测物件。
在一些实施例中,终端根据碰撞检测物件的空间变换参数,将观察射线转换为碰撞检测物件的局部空间中的局部观察射线,根据局部观察射线与碰撞检测物件的物件层信息指示的层之间的关系,得到操作位置的碰撞检测结果。例如,在局部观察射线与碰撞检测物件的物件层信息指示的各层中任一层相交,则确定碰撞检测结果为发生碰撞,反之,确定碰撞检测结果为未发生碰撞。
在一些实施例中,在碰撞检测物件的形状规则的情况下,基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,得到操作位置的碰撞检测结果。在碰撞检测物件的形状不规则的情况下,判断碰撞检测物件的包围盒是否与观察射线相交,若相交,则确定碰撞检测结果为发生碰撞,在碰撞检测物件的形状不规则的情况下,碰撞检测物件的包围盒与碰撞检测物件的形状一致。
在一些实施例中,在碰撞检测结果为发生碰撞的情况下,确定该物件操作是针对该碰撞检测物件的,从而针对该碰撞检测物件执行物件操作,例如,在物件操作为拾取物件的操作的情况下,确定拾取物件的操作是针对该碰撞检测物件的,从而针对碰撞检测物件执行拾取的操作。
本实施例中,基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,得到操作位置的碰撞检测结果,在碰撞检测结果为发生碰撞的情况下,针对碰撞检测物件执行物件操作,从而在物件操作的场景下,可以基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,准确得到碰撞检测结果。
在一些实施例中,根据操作位置从虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件,包括:从虚拟场景的观察位置向操作位置发射射线,得到观察射线;从虚拟场景中各动态虚拟物件的包围盒中确定观察射线击中的首个包围盒,得到目标包围盒;将目标包围盒所属的动态虚拟物件,确定为用于参与碰撞检测的碰撞检测物件。
具体地,如上,场景树中存储了虚拟场景中各动态虚拟物件的包围盒。终端可以从场景树中获取与观察射线相交的各包围盒,然后从与观察射线相交的各包围盒中获取与观察位置最近的包围盒,得到目标包围盒。
在一些实施例中,终端将目标包围盒所属的动态虚拟物件确定为碰撞检测物件,例如目标包围盒为动态虚拟物件A的包围盒,则将动态虚拟物件A确定为碰撞检测物件。以场景树为八叉树为例,如图11所示,展示了得到碰撞检测物件的流程图,对八叉树发射射线是指发射观察射线,图11中,选取最近的动态虚拟物件,是指从与观察射线相交的各包围盒中获取与观察位置最近的包围盒,得到目标包围盒,从而根据目标包围盒得到碰撞检测物件。
本实施例中,将目标包围盒所属的动态虚拟物件,确定为参与碰撞检测的碰撞检测物件,从而快速得到了参与碰撞检测的碰撞检测物件。
在一些实施例中,基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,得到操作位置的碰撞检测结果,包括:根据碰撞检测物件的空间变换参数,将观察射线转换为碰撞检测物件的局部空间中的局部观察射线;根据局部观察射线与碰撞检测物件的物件层信息指示的层之间的关系,得到操作位置的碰撞检测结果。
具体地,终端根据碰撞检测物件的空间变换参数,将观察射线进行反向变换,得到变换后的观察射线。然后。将变换后的观察射线转化为碰撞检测物件的局部空间中,即采用碰撞检测物件的局部空间的坐标系来表示变换后的观察射线,得到局部观察射线。
在一些实施例中,终端确定碰撞检测物件的物件层信息指示的层中,是否存在与局部观察射线相交的层。若存在。则确定操作位置的碰撞结果为发生碰撞,若不存在,则确定操作位置的碰撞检测结果为未发生碰撞。
本实施例中,根据局部观察射线与碰撞检测物件的物件层信息指示的层之间的关系,得到操作位置的碰撞检测结果,从而快速得到了碰撞检测结果。
在一些实施例中,如图12所示,提供了一种碰撞检测方法,该方法可以由终端或服务器执行,还可以由终端和服务器共同执行,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤1202至步骤1210。其中:
步骤1202,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件。
具体地,服务器中存储有虚拟场景中的各动态虚拟物件。虚拟场景所处世界空间中存在预设平面,服务器可以获取虚拟场景在该预设平面上占用的区域得到平面区域,并将平面区域划分为多个单位区域。预设平面上分布有全局二维网格。每个单位区域包括全局二维网格中的多个单元格。全局二维网格中的单元格的大小是预设,例如可以为0.5米×0.5米大小的。每个单位区域的大小也是预设的,例如,每个单位区域的尺寸为20米×20米,则每个单位区域中包含40×40个单元格。若平面区域为140米×140米的,则可以划分出7×7个单位区域,如图13所示,展示了对平面区域划分出的7×7个单位区域。确定碰撞检测点的方法参考上述确定碰撞检测点的方法。
在一些实施例中,服务器中可以存储有虚拟场景中的各动态虚拟对象。虚拟场景中有多种类型的子场景,例如,虚拟场景是一个家园的虚拟场景,该虚拟场景中包括草坪、花园、池塘、室内、室外等子场景,每个子场景在平面区域中占用的部分称为子平面区域,从而每个子场景分别对应一个子平面区域。每个子平面区域包括多个单位区域。服务器可以为每个子平面区域中的每个单位区域生成存储块标识,存储块标识初始时为空,当确定单位区域中摆放动态虚拟物件时,则将存储块标识更新为指向具体的存储块的标识,存储块是指一块存储资源,例如可以是一块内存。每个存储块对应有存储块标识,存储块标识例如为指向该存储块的指针。然后,服务器将单位区域中摆放的动态虚拟物件存储至该存储块标识指向的存储块中。存储块可以是固定大小的,也可以是大小可变的存储块。例如,存储块中可以预留有能够存储150个动态虚拟物件的存储空间,还可以维护一个哈希表,哈希表占用的存储空间的大小可以动态变化,当超过150个虚拟动态物件时,将超出的虚拟动态物件存储至哈希表中。如图14所示,展示了虚拟场景对应的动态虚拟物件存储结构,该动态虚拟物件存储结构中包括场景标识、场景所有者标识、子场景数量、各子场景分别占用的区域的数据,场景标识用于唯一标识虚拟场景,虚拟场景对应一个位面,故场景标识也可以是位面标识,场景所有者标识也可以是位面所有标识,位面所有者标识是指拥有该位面的用户的标识,子场景占用的区域的数据中包括子场景占用的每个区域对应的存储块的标识。具体地,服务器确定虚拟场景中的动态虚拟物件在预设平面上的投影区域,确定与该投影区域相交的单位区域,将该动态虚拟物件存储至与该投影区域相交的单位区域所对应的存储块中。
在一些实施例中,服务器中可以存储预设区域中各个全局单元格分别对应的单元格空间中至少一个层,预设区域是平面区域中的一部分,例如该预设平面中包括400个全局单元格,存储这400个全局单元格的前2层。在预设平面中的动态虚拟物件未发生变化的情况下,可以直接采用存储的层进行碰撞检测的计算,从而加快计算效率。当虚拟物件在预设平面内移动或改变的情况下,则可以重新计算预设区域中各个全局单元格分别对应的单元格空间中层。
在一些实施例中,服务器根据碰撞检测点,从存储的各动态虚拟对象中确定用于参与碰撞检测的参考动态虚拟物件。具体地,服务器获取碰撞检测点在预设平面上的投影位置,并确定该投影位置所属的单位区域,得到目标单位区域。从该目标单位区域对应的存储块中获取存储的动态虚拟物件,得到参考动态虚拟物件。
步骤1204,获取参考动态虚拟物件的空间变换参数;空间变换参数表征参考动态虚拟物件从初始空间状态变换到当前空间状态的方式。
其中,参考动态虚拟物件的空间变换参数,参考上述目标动态虚拟物件的空间变换参数相关描述。参考动态虚拟物件的空间变换参数可以是终端发送至服务器的。
步骤1206,获取参考动态虚拟物件在初始空间状态下时在参考动态虚拟物件的局部空间中的物件层信息。
其中,物件层信息,指示参考动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,层表征参考动态虚拟物件在单元格空间中占用的空间。生成参考动态虚拟物件的物件层信息的方法,参考上述生成目标动态虚拟物件的物件层信息的方法。参考动态虚拟物件的物件层信息,可以是服务器生成的,也可以是终端生成并发送至服务器的。物件层信息也可以称为体素文件或体素数据。
在一些实施例中,终端的GPU(graphics processing unit,图形处理器)中存在着色器,该着色器用于采用结构化形式存储动态虚拟物件的高度数据和方向信息,并对存储的结构化数据处理生成动态虚拟物件的体素数据即物件层信息,例如,终端GPU中的着色器采用给场景拍碰撞的方法生成体素数据。
步骤1208,基于空间变换参数,将参考动态虚拟物件所处世界空间中的碰撞检测点变换为局部空间中的目标点。
具体地,终端根据空间变换参数对碰撞检测点进行反向变换,得到变换后的碰撞检测点,将变换后的碰撞检测点,从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到目标点。其中,反向变换是指与参考动态虚拟物件相反的变换,例如,空间变换参数为将参考动态虚拟物件绕Z轴顺时针旋转35度,则反向变换为绕Z轴逆时针旋转35度。
步骤1210,根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果。
具体地,服务器可以获取目标点在参考动态虚拟物件所处局部空间中参考平面上的投影位置,并确定该投影位置所属的局部单元格,获取该投影位置所属的局部单元格的单元格层信息表征的层,得到碰撞检测点对应的单元格空间中的层。
在一些实施例中,服务器可以将生成的碰撞检测结果发送至终端,终端生成碰撞检测结果后,采用来自于服务器的碰撞检测结果对终端生成的碰撞检测结果进行校验,在校验通过的情况下,采用终端的碰撞检测结果进行后续处理,在校验失败的情况下,采用服务器的碰撞检测结果进行后续处理。
上述碰撞检测方法,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件,获取参考动态虚拟物件的空间变换参数,获取参考动态虚拟物件在初始空间状态下时在参考动态虚拟物件的局部空间中的物件层信息,基于空间变换参数,将参考动态虚拟物件所处世界空间中的碰撞检测点变换为局部空间中的目标点,根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果。从而即便目标动态虚拟物件在虚拟场景中发生了空间状态的变化,在碰撞检测的过程中根据空间变换参数和物件层信息,依然可以得到可靠的碰撞检测结果,故本方法支持动态虚拟物件在虚拟场景中自由变换,提高了虚拟场景中的交互自由度。
另外,由于故本方法支持动态虚拟物件在虚拟场景中自由变换,从而可以在虚拟场景中快速对动态虚拟物件进行变换从而得到所需的效果,提高了在虚拟场景中的交互效率。
在一些实施例中,根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件,包括:将虚拟场景在所处世界空间中预设平面上占用的平面区域划分为多个单位区域;获取碰撞检测点在预设平面上的投影位置所属的单位区域,得到目标单位区域;根据目标单位区域从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;参考动态虚拟物件在预设平面上的投影区域与目标单位区域相交。
具体地,服务器获取碰撞检测点在预设平面上的投影位置,并确定该投影位置所属的全局单元格,将该投影位置所属的全局单元格所属于的单位区域,作为目标单位区域。
在一些实施例中,服务器可以从该目标单位区域对应的存储块中获取存储的动态虚拟物件,并确定该动态虚拟物件在预设平面上的投影区域,若该投影区域包括碰撞检测的投影位置所属的全局单元格,则将该动态虚拟物件确定为参考动态虚拟物件。
本实施例中,根据目标单位区域从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件,参考动态虚拟物件在预设平面上的投影区域与目标单位区域相交,从而快速得到了参考动态虚拟物件。
在一些实施例中,基于空间变换参数,将世界空间中的碰撞检测点变换为局部空间中的目标点,包括:根据空间变换参数对碰撞检测点进行反向变换,得到变换后的碰撞检测点;将变换后的碰撞检测点,从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到局部空间中的目标点。
其中,反向变换是与对参考动态虚拟物件进行的变换所相反的变换,反向变换包括反向旋转或反向缩放中的至少一个,例如,空间变换参数为将参考动态虚拟物件绕Z轴顺时针旋转35度,则反向变换为绕Z轴逆时针旋转35度。
具体地,在空间变换参数中包括旋转参数时,服务器从空间变换参数中获取旋转 参数和旋转中心位置,根据旋转参数生成反向旋转矩阵,利用反向旋转矩阵对碰撞检测点 绕旋转中心位置进行反向旋转,得到反向旋转后的碰撞检测点。在空间变换参数中还包括 缩放参数时,得到反向旋转后的碰撞检测点后,服务器根据缩放参数对反向旋转后的碰撞 检测点进行反向缩放,得到变换后的碰撞检测点。例如,若缩放参数是对参考动态虚拟物件 在X轴上放大2倍的参数,则反向缩放是在X轴上缩小为1/2的参数。例如,若碰撞检测点在世 界空间中的坐标为(px,py,pz), 参考动态虚拟物件的起始位置的坐标为(sx,sy,sz),参考 动态虚拟物件的中心位置在世界空间中的坐标为(cx,cy,cz),空间变换参数包括绕z轴顺 时针旋转角度,沿x轴放大倍数为ex,沿y轴放大倍数为ey,沿z轴放大倍数为ez,绕z轴旋 转是指以经过参考动态虚拟物件的中心位置且平行于z轴的线进行旋转,服务器以(cx,cy, cz)为中心计算(px,py,pz)的方向向量,得到方向向量(px-cx,py-cy,0),由于在旋转过程 中z方向上的坐标不变,故可以不考虑z方向上的坐标,故方向向量(px-cx,py-cy,0)中z方 向的坐标设置为了0,服务器可以根据公式(1)进行反向旋转,得到反向旋转后的碰撞检测 点,可以根据公式(2)进行反向缩放,得到变换后的碰撞检测点,并将变换后的碰撞检测点, 从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到目标点。
(1)
(2)
其中,Pinv代表反向旋转后的碰撞检测点,Pinvx、Pinvy、Pinvz代表Pinv的x、y、z三个轴上的坐标。由于在旋转过程中z方向上的坐标不变,故可以不考虑z方向上的坐标,故Pinvz为0。公式(2)中通过ex对Pinvx进行了缩小,通过ey对Pinvy进行了缩小,缩小后,得到(Pinvx/ex,Pinvy/ey, Pinvz),然后计算(Pinvx/ex,Pinvy/ey, Pinvz)和(sx,sy,0)之间的差,从而将变换后的碰撞检测点(Pinvx/ex,Pinvy/ey, Pinvz)从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到局部空间中的目标点(dx,dy,dz)。目标点在局部空间中参考平面上的投影位置为(dx,dy,0)。
本实施例中,根据空间变换参数对碰撞检测点进行反向变换,得到变换后的碰撞检测点,将变换后的碰撞检测点,从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到局部空间中的目标点,从而使得根据目标点从物件层信息指示的层中确定出的层,属于该碰撞检测点对应的单元格空间中的层。
在一些实施例中,碰撞检测点对应有多个参考动态虚拟物件,多个参考动态虚拟物件中包括至少一个形状规则的参考动态虚拟物件和至少一个形状不规则的参考动态虚拟物件,物件层信息是在参考动态虚拟物件为不规则形状情况下获取的;根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果,包括:针对形状不规则的参考动态虚拟物件,根据目标点从物件层信息所指示的层中获取各参考层;物件层信息所指示的层,是指目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成的单元格空间中的层,单元格空间中的层表征目标动态虚拟物件在单元格空间中占用的空间;获取形状规则的参考动态虚拟物件与经过碰撞检测点的射线的各交点,得到各参考交点;根据各参考层和各参考交点,确定碰撞检测点对应的单元格空间中的各层;基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果。
具体地,物件层信息中包括多个局部单元格分别对应的单元格层信息,针对形状不规则的参考动态虚拟物件,服务器获取目标点在局部空间中参考平面上的投影位置,得到目标投影位置,获取目标投影位置所属的局部单元格对应的单元格信息所表征的层,将获取各层分别作为参考层。
在一些实施例中,空间变换参数中包括目标方向上的缩放参数,服务器获取目标投影位置所属的局部单元格对应的单元格信息所表征的层,针对获取的每个层,将层的上边界高度和下边界高度分别与缩放参数相乘,得到缩放后的上边界高度和缩放后的下边界高度,将缩放后的上边界高度和缩放后的下边界高度表征的层作为参考层,从而得到各参考层。
在一些实施例中,针对形状规则的参考动态虚拟物件,服务器可以获取形状规则的参考动态虚拟物件的多个形状点;多个形状点,为用于表征形状规则的参考动态虚拟物件的形状的点;例如,参考动态虚拟物件为长方体,多个形状点为长方体的8个顶点。服务器获取当前虚拟场景中该形状规则的参考动态虚拟物件,将碰撞检测点向预设平面进行投影得到碰撞检测点的投影位置例如(x,y,0),以投影位置为起点,垂直于预设平面的单位方向向量(0,0,1)为方向发生参考射线,并获取发参考射线与当前虚拟场景中该形状规则的参考动态虚拟物件的交点,得到各参考交点。由于参考射线从(x,y,0)出发且方向为(0,0,1),故参考射线经过碰撞检测点。
在一些实施例中,服务器获取未经过变换的参考动态虚拟物件中各形状点的相对 坐标,相对坐标是相对于该未经过变换的参考动态虚拟物件的中心点的坐标,即以该中心 点为原点的情况下,各形状点的坐标则为相对坐标。服务器可以根据空间变换参数对各形 状点的相对坐标进行空间变换,得到各形状点的变换后的相对坐标。例如,若空间变换参数 包括绕x轴旋转、绕y轴旋转、绕z轴旋转,沿着x轴方向放大ex、沿着y轴方向放大ey和 沿着z轴方向放大ez,则服务器可以根据公式(3)计算出各形状点的变换后的相对坐标。其 中,(cl,cw,ch)代表相对坐标,(bx,by,bz)代表变换后的相对坐标。
(3)
在一些实施例中,服务器得到各形状点的相对坐标后,获取已经过变换的参考动态虚拟物件的中心坐标,根据该中心坐标和变换后的相对坐标,可以得到已经过变换的参考动态虚拟物件中各形状点的实际坐标。然后,根据各形状点的实际坐标表示该已经过变换的参考动态虚拟物件,即根据各形状点的实际坐标表示当前虚拟场景中该形状规则的参考动态虚拟物件。从而确定该已经过变换的参考动态虚拟物件与参考射线之间的交点,得到各参考交点。根据各参考层和各参考交点,确定碰撞检测点对应的单元格空间中的各层的具体实现方法,可以参考根据各目标层和各目标交点,确定碰撞检测点所对应的单元格空间中的各层的具体实现方法。基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果的具体实现方法,可以参考基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果的具体实现方法。
本实施例中,根据各目标层和各目标交点,确定碰撞检测点所对应的单元格空间中的各层,基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果,从而,不论碰撞检测点对应的多个目标动态虚拟物件是否形状规则,都可以得到碰撞检测点所对应的单元格空间中的各层,从而快速得到碰撞检测结果。
在一些实施例中,如图15所示,提供了一种碰撞检测方法,该方法可以由终端或服务器执行,还可以由终端和服务器共同执行,以该方法应用于图1中的终端为例进行说明,包括以下步骤1502至步骤1522。其中:
步骤1502,在动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格。
步骤1504,确定处于初始空间状态的不规则形状的动态虚拟物件在参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格。
步骤1506,针对每个目标局部单元格,基于从目标局部单元格发出的射线和动态虚拟物件,生成目标局部单元格对应的单元格层信息。
步骤1508,根据各目标局部单元格对应的单元格层信息,生成动态虚拟物件的物件层信息。
步骤1510,展示虚拟场景,响应于向虚拟场景中加入动态虚拟物件。
步骤1512,响应于针对虚拟场景中的动态虚拟物件的空间变换操作,存储空间变换操作对应的空间变换参数。
步骤1514,获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的各目标动态虚拟物件。
步骤1516,针对形状不规则的目标动态虚拟物件,获取目标动态虚拟物件的空间变换参数,获取目标动态虚拟物件的物件层信息,确定碰撞检测点在虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格,并基于目标全局单元格生成第二射线,根据空间变换参数对第二射线进行反向变换,将反向变换后所得到的射线,转换为局部空间中的目标射线,获取物件层信息所指示的层中与目标射线相交的层,得到该形状不规则的目标虚拟家具确定出的层。
步骤1518,针对形状规则的目标动态虚拟物件,获取目标动态虚拟物件与经过碰撞检测点的射线的各交点,得到各目标交点,根据各目标层,得到该形状规则的目标虚拟家具确定出的层。
步骤1520,获取碰撞检测点对应的全局单元格所对应的初始层信息,根据初始层信息表征的层和各目标虚拟动态物件确定出的层,确定碰撞检测点所对应的单元格空间中的各层。
步骤1522,基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果。
本申请提供的碰撞检测方法,根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线,基于物件层信息所指示的层中与目标射线相交的层,确定碰撞检测点所对应的单元格空间中的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。从而即便目标动态虚拟物件在虚拟场景中发生了空间状态的变化,在碰撞检测的过程中根据空间变换参数和物件层信息,依然可以得到可靠的碰撞检测结果,故本方法支持动态虚拟物件在虚拟场景中自由变换,提高了虚拟场景中的交互自由度。由于是基于物件层信息进行碰撞检测的,因此,当动态虚拟物件之间存在重叠或者动态虚拟物件呈现浮空状态的情况下,均可以正确的得到碰撞检测结果,从而本申请提供的碰撞检测方法还支持动态虚拟物件重叠、浮空、虚拟角色在虚拟场景中行走、面摆放和拾取家具,面摆放是指动态虚拟物件在拖动过程中自动贴合虚拟场景中的法线方向,进一步提高了虚拟场景中的交互自由度。
本申请提供的碰撞检测方法,可以应用于任意的需要进行碰撞检测的场景中,包括但不限于是游戏或VR场景中。例如,可以应用于移动端的3DMMO游戏(三维多人在线游戏),MMO 是Massively Multiplayer Online(网络游戏)的简称。
以游戏中虚拟角色的移动场景为例,动态虚拟物件可以为虚拟家具,虚拟角色可以在游戏中自己的家园中摆放虚拟家具,并可以对虚拟家具进行空间变换例如进行旋转或缩放,当虚拟角色在该家园中移动的情况下,终端根据虚拟角色的移动方向和移动速度确定碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标虚拟家具。针对形状不规则的目标虚拟家具,终端获取该目标虚拟家具的空间变换参数和物件层信息,根据空间变换参数和物件层信息,得到该目标虚拟家具确定出的层。针对规则形状的目标虚拟家具,获取目标虚拟家具与经过碰撞检测点的射线的各交点,得到各目标交点,根据各目标交点得到该目标虚拟家具确定出的层。终端还可以获取碰撞检测点对应的初始层信息,初始层信息指示虚拟场景中的动态虚拟物件之外的虚拟物件在该碰撞检测点对应的全局单元格的单元格空间中产生的层。然后,终端各个目标虚拟家具分别确定出的层和初始层信息,得到碰撞检测点所对应的单元格空间中的各层,根据碰撞检测点所对应的单元格空间中的各层,得到碰撞检测点在虚拟场景中的碰撞检测结果。
本申请提供的碰撞检测方法,可以对基于体素进行碰撞检测的游戏进行改进,例如图16中,展示了服务端基于体素碰撞的系统架构图,该系统架构图包括三层,分别为业务逻辑层、移动模块层和3D场景引擎层。其中,业务逻辑层包括智能移动、玩家移动、技能位移等模块,智能移动也可以称为AI(Artificial Intelligence,人工智能)移动,移动模块层包括移动控制模块,还包括行走、轻功和拖拽等模块。3D场景引擎层包括碰撞检测模块、场景数据访问模块、场景数据管理模块、运动计算引擎、层数据管理模块、动态阻挡数据管理模块、格子数据管理模块和体素数据管理等模块,格子即单元格。业务逻辑层负责玩家、NPC(Non-Player Character,非玩家角色)等在游戏中的最上层的逻辑。移动模块层提供行走、轻工等移动控制模块。3D场景引擎层实现了层数管理、碰撞检测等,并向上层提供服务。本申请提供的碰撞检测方法可以用于对3D场景引擎层进行改进从而使得改进后的游戏允许虚拟角色自由摆放动态虚拟物件,例如在家园系统中自由摆放动态虚拟物件,动态虚拟物件可以自由移动、缩放、旋转,动态虚拟物件可以浮空,也可重叠,充分满足玩家的创意和个性化需求。如图17,所示展示了采用本申请提出的碰撞检测方法改进后的生成的虚拟场景的画面,画面中存在浮空或重叠的效果。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的碰撞检测方法的碰撞检测装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个碰撞检测装置实施例中的具体限定可以参见上文中对于碰撞检测方法的限定,在此不再赘述。
在一些实施例中,如图18所示,提供了一种碰撞检测装置,包括:第一物件确定模块1802、第一参数获取模块1804、第一信息获取模块1806、射线得到模块1808和第一结果得到模块1810,其中:
第一物件确定模块1802,用于获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件。
第一参数获取模块1804,用于获取目标动态虚拟物件的空间变换参数;空间变换参数表征目标动态虚拟物件从初始空间状态变换到当前空间状态的方式。
第一信息获取模块1806,用于获取目标动态虚拟物件在初始空间状态下时在目标动态虚拟物件的局部空间中的物件层信息。
射线得到模块1808,用于根据空间变换参数,修正在世界空间下从碰撞检测点所对应的单元格发出的射线,得到在局部空间中的目标射线。
第一结果得到模块1810,用于基于物件层信息所指示的层中与目标射线相交的层,获得碰撞检测点在虚拟场景中的碰撞检测结果。
在一些实施例中,碰撞检测装置还包括层信息生成模块,层信息生成模块,用于在目标动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格;确定处于初始空间状态的目标动态虚拟物件在参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格;针对每个目标局部单元格,基于从目标局部单元格发出的射线和目标动态虚拟物件,生成目标局部单元格对应的单元格层信息;根据各目标局部单元格对应的单元格层信息,生成目标动态虚拟物件的物件层信息。
在一些实施例中,层信息生成模块,还用于基于目标局部单元格生成第一射线;第一射线从目标局部单元格发出且与参考平面垂直;获取第一射线穿入目标动态虚拟物件时的高度以及第一射线穿出目标动态虚拟物件时的高度,得到各高度;获取各高度的标签;每个高度的标签为第一预设标签或第二预设标签中的一个,第一预设标签,表征穿入目标动态虚拟物件,第二预设标签,表征穿出目标动态虚拟物件;根据各高度的标签,生成目标局部单元格对应的单元格层信息。
在一些实施例中,层信息生成模块,还用于按照从小到大的顺序对各高度进行排列,生成高度序列;从高度序列中确定目标高度;目标高度的标签为第二预设标签,且目标高度的下一高度的标签为第一预设标签;在目标高度和目标高度的下一高度之间,将高度序列切分得到多个高度子序列;针对每个高度子序列,将高度子序列中起始高度作为层的下边界高度,并将高度子序列中终止高度作为层的上边界高度,生成高度子序列对应的层信息;根据每个高度子序列对应的层信息得到目标局部单元格对应的单元格层信息。
在一些实施例中,第一物件确定模块1802,还用于确定碰撞检测点在虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格;全局单元格是指全局二维网格中的单元格,全局二维网格是在预设平面上分布的二维网格;基于目标全局单元格生成第二射线;第二射线从目标全局单元格发出且垂直于预设平面;从虚拟场景中获取与第二射线相交的动态虚拟物件,得到用于参与碰撞检测的目标动态虚拟物件。
在一些实施例中,射线得到模块1808,还用于根据空间变换参数对第二射线进行反向变换;反向变换是与正向变换相反的变换,正向变换是指根据空间变换参数对目标动态虚拟物件进行的变换;将反向变换后所得到的射线,转换为局部空间中的目标射线。
在一些实施例中,碰撞检测点对应有多个目标动态虚拟物件,多个目标动态虚拟物件中包括至少一个形状规则的目标动态虚拟物件和至少一个形状不规则的目标动态虚拟物件,物件层信息是在目标动态虚拟物件为不规则形状情况下获取的;第一结果得到模块1810,还用于针对形状不规则的目标动态虚拟物件,基于物件层信息所指示的层中与目标射线相交的层,得到目标层;物件层信息所指示的层,是指目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成的单元格空间中的层,单元格空间中的层表征目标动态虚拟物件在单元格空间中占用的空间;获取形状规则的目标动态虚拟物件与经过碰撞检测点的射线的各交点,得到各目标交点;根据各目标层和各目标交点,确定碰撞检测点所对应的单元格空间中的各层;基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果。
在一些实施例中,空间变换参数中包括目标方向上的缩放参数,目标方向是指在在世界空间下从碰撞检测点所对应的单元格发出的射线的方向;第一结果得到模块1810,还用于从物件层信息所指示的层中获取与目标射线相交的层,得到相交层;根据缩放参数对相交层进行缩放处理得到目标层。
在一些实施例中,碰撞检测装置还包括:位置得到模块,用于响应于在虚拟场景中触发的物件操作,获取物件操作的位置得到操作位置;第三物件确定模块,用于根据操作位置从虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件;第三结果得到模块,用于基于碰撞检测物件的空间变换参数和碰撞检测物件的物件层信息,得到操作位置的碰撞检测结果;操作执行模块,用于在碰撞检测结果为发生碰撞的情况下,针对碰撞检测物件执行物件操作。
在一些实施例中,第三物件确定模块,还用于从虚拟场景的观察位置向操作位置发射射线,得到观察射线;从虚拟场景中各动态虚拟物件的包围盒中确定观察射线击中的首个包围盒,得到目标包围盒;将目标包围盒所属的动态虚拟物件,确定为用于参与碰撞检测的碰撞检测物件。
在一些实施例中,第三结果得到模块,还用于根据碰撞检测物件的空间变换参数,将观察射线转换为碰撞检测物件的局部空间中的局部观察射线;根据局部观察射线与碰撞检测物件的物件层信息指示的层之间的关系,得到操作位置的碰撞检测结果。
在一些实施例中,如图19所示,提供了一种碰撞检测装置,包括:第二物件确定模块1902、第二参数获取模块1904、第二信息获取模块1906、检测点变换模块1908和第二结果得到模块1910,其中:
第二物件确定模块1902,用于获取虚拟场景中的碰撞检测点,并根据碰撞检测点从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件。
第二参数获取模块1904,用于获取参考动态虚拟物件的空间变换参数;空间变换参数表征参考动态虚拟物件从初始空间状态变换到当前空间状态的方式。
第二信息获取模块1906,用于获取参考动态虚拟物件在初始空间状态下时在参考动态虚拟物件的局部空间中的物件层信息。
检测点变换模块1908,用于基于空间变换参数,将参考动态虚拟物件所处世界空间中的碰撞检测点变换为局部空间中的目标点。
第二结果得到模块1910,用于根据目标点,从物件层信息所指示的层中确定碰撞检测点对应的单元格空间中的层,获得碰撞检测点的碰撞检测结果。
在一些实施例中,第二物件确定模块1902,还用于将虚拟场景在所处世界空间中预设平面上占用的平面区域划分为多个单位区域;获取碰撞检测点在预设平面上的投影位置所属的单位区域,得到目标单位区域;根据目标单位区域从虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;参考动态虚拟物件在预设平面上的投影区域与目标单位区域相交。
在一些实施例中,检测点变换模块1908,还用于根据空间变换参数对碰撞检测点进行反向变换,得到变换后的碰撞检测点;将变换后的碰撞检测点,从世界空间转换为参考动态虚拟物件所处局部空间中的点,得到局部空间中的目标点。
在一些实施例中,碰撞检测点对应有多个参考动态虚拟物件,多个参考动态虚拟物件中包括至少一个形状规则的参考动态虚拟物件和至少一个形状不规则的参考动态虚拟物件,物件层信息是在参考动态虚拟物件为不规则形状情况下获取的;第二结果得到模块1910,还用于针对形状不规则的参考动态虚拟物件,根据目标点从物件层信息所指示的层中获取各参考层;物件层信息所指示的层,是指目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成的单元格空间中的层,单元格空间中的层表征目标动态虚拟物件在单元格空间中占用的空间;获取形状规则的参考动态虚拟物件与经过碰撞检测点的射线的各交点,得到各参考交点;根据各参考层和各参考交点,确定碰撞检测点对应的单元格空间中的各层;基于碰撞检测点所对应的单元格空间中的各层,确定碰撞检测点在虚拟场景中的碰撞检测结果。
上述碰撞检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一些实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图20所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储碰撞检测方法中涉及到的数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种碰撞检测方法。
在一些实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图21所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种碰撞检测方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图20和图21中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一些实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述碰撞检测方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述碰撞检测方法中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (33)

1.一种碰撞检测方法,其特征在于,所述方法包括:
获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件;
获取所述目标动态虚拟物件的空间变换参数;所述空间变换参数表征所述目标动态虚拟物件从初始空间状态变换到当前空间状态的方式;
获取所述目标动态虚拟物件在所述初始空间状态下时在所述目标动态虚拟物件的局部空间中的物件层信息;所述物件层信息,指示所述目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,所述层表征所述目标动态虚拟物件在所述单元格空间中占用的空间;
根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线;
基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述目标动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格;
确定处于初始空间状态的所述目标动态虚拟物件在所述参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格;
针对每个所述目标局部单元格,基于从所述目标局部单元格发出的射线和所述目标动态虚拟物件,生成所述目标局部单元格对应的单元格层信息;
根据各所述目标局部单元格对应的单元格层信息,生成所述目标动态虚拟物件的物件层信息。
3.根据权利要求2所述的方法,其特征在于,所述基于从所述目标局部单元格发出的射线和所述目标动态虚拟物件,生成所述目标局部单元格对应的单元格层信息,包括:
基于所述目标局部单元格生成第一射线;所述第一射线从所述目标局部单元格发出且与所述参考平面垂直;
获取所述第一射线穿入所述目标动态虚拟物件时的高度以及所述第一射线穿出所述目标动态虚拟物件时的高度,得到各高度;
获取各所述高度的标签;每个所述高度的标签为第一预设标签或第二预设标签中的一个,所述第一预设标签,表征穿入所述目标动态虚拟物件,所述第二预设标签,表征穿出所述目标动态虚拟物件;
根据各所述高度的标签,生成所述目标局部单元格对应的单元格层信息。
4.根据权利要求3所述的方法,其特征在于,所述根据各所述高度的标签,生成所述目标局部单元格对应的单元格层信息,包括:
按照从小到大的顺序对各所述高度进行排列,生成高度序列;
从所述高度序列中确定目标高度;所述目标高度的标签为第二预设标签,且所述目标高度的下一高度的标签为第一预设标签;
在所述目标高度和所述目标高度的下一高度之间,将所述高度序列切分得到多个高度子序列;
针对每个所述高度子序列,将所述高度子序列中起始高度作为层的下边界高度,并将所述高度子序列中终止高度作为层的上边界高度,生成所述高度子序列对应的层信息;
根据每个所述高度子序列对应的层信息得到所述目标局部单元格对应的单元格层信息。
5.根据权利要求1所述的方法,其特征在于,所述根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件,包括:
确定所述碰撞检测点在所述虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格;所述全局单元格是指全局二维网格中的单元格,所述全局二维网格是在所述预设平面上分布的二维网格;
基于所述目标全局单元格生成第二射线;所述第二射线从所述目标全局单元格发出且垂直于所述预设平面;
从所述虚拟场景中获取与所述第二射线相交的动态虚拟物件,得到用于参与碰撞检测的目标动态虚拟物件。
6.根据权利要求5所述的方法,其特征在于,所述根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线,包括:
根据所述空间变换参数对所述第二射线进行反向变换;所述反向变换是与正向变换相反的变换,所述正向变换是指根据所述空间变换参数对所述目标动态虚拟物件进行的变换;
将反向变换后所得到的射线,转换为所述局部空间中的目标射线。
7.根据权利要求1所述的方法,其特征在于,所述碰撞检测点对应有多个目标动态虚拟物件,所述多个目标动态虚拟物件中包括至少一个形状规则的目标动态虚拟物件和至少一个形状不规则的目标动态虚拟物件,所述物件层信息是在所述目标动态虚拟物件为不规则形状情况下获取的;
所述基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果,包括:
针对形状不规则的所述目标动态虚拟物件,基于所述物件层信息所指示的层中与所述目标射线相交的层,得到目标层;
获取形状规则的所述目标动态虚拟物件与经过所述碰撞检测点的射线的各交点,得到各目标交点;
根据各所述目标层和各所述目标交点,确定所述碰撞检测点所对应的单元格空间中的各层;
基于所述碰撞检测点所对应的单元格空间中的各层,确定所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
8.根据权利要求7所述的方法,其特征在于,所述空间变换参数中包括目标方向上的缩放参数,所述目标方向是指在所述在世界空间下从所述碰撞检测点所对应的单元格发出的射线的方向;
所述基于所述物件层信息所指示的层中与所述目标射线相交的层,得到目标层,包括:
从所述物件层信息所指示的层中获取与所述目标射线相交的层,得到相交层;
根据所述缩放参数对所述相交层进行缩放处理得到目标层。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于在所述虚拟场景中触发的物件操作,获取所述物件操作的位置得到操作位置;
根据所述操作位置从所述虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件;
基于所述碰撞检测物件的空间变换参数和所述碰撞检测物件的物件层信息,得到所述操作位置的碰撞检测结果;
在所述碰撞检测结果为发生碰撞的情况下,针对所述碰撞检测物件执行所述物件操作。
10.根据权利要求9所述的方法,其特征在于,所述根据所述操作位置从所述虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件,包括:
从所述虚拟场景的观察位置向所述操作位置发射射线,得到观察射线;
从所述虚拟场景中各动态虚拟物件的包围盒中确定所述观察射线击中的首个包围盒,得到目标包围盒;
将所述目标包围盒所属的动态虚拟物件,确定为用于参与碰撞检测的碰撞检测物件。
11.根据权利要求10所述的方法,其特征在于,所述基于所述碰撞检测物件的空间变换参数和所述碰撞检测物件的物件层信息,得到所述操作位置的碰撞检测结果,包括:
根据所述碰撞检测物件的空间变换参数,将所述观察射线转换为所述碰撞检测物件的局部空间中的局部观察射线;
根据所述局部观察射线与所述碰撞检测物件的物件层信息指示的层之间的关系,得到所述操作位置的碰撞检测结果。
12.一种碰撞检测方法,其特征在于,所述方法包括:
获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;
获取所述参考动态虚拟物件的空间变换参数;所述空间变换参数表征所述参考动态虚拟物件从初始空间状态变换到当前空间状态的方式;
获取所述参考动态虚拟物件在所述初始空间状态下时在所述参考动态虚拟物件的局部空间中的物件层信息;所述物件层信息,指示所述参考动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,所述层表征所述参考动态虚拟物件在所述单元格空间中占用的空间;
基于所述空间变换参数,将所述参考动态虚拟物件所处世界空间中的所述碰撞检测点变换为所述局部空间中的目标点;
根据所述目标点,从所述物件层信息所指示的层中确定所述碰撞检测点对应的单元格空间中的层,获得所述碰撞检测点的碰撞检测结果。
13.根据权利要求12所述的方法,其特征在于,所述根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件,包括:
将所述虚拟场景在所处世界空间中预设平面上占用的平面区域划分为多个单位区域;
获取所述碰撞检测点在所述预设平面上的投影位置所属的单位区域,得到目标单位区域;
根据所述目标单位区域从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;所述参考动态虚拟物件在所述预设平面上的投影区域与所述目标单位区域相交。
14.根据权利要求12所述的方法,其特征在于,所述基于所述空间变换参数,将所述参考动态虚拟物件所处世界空间中的所述碰撞检测点变换为所述局部空间中的目标点,包括:
根据所述空间变换参数对所述碰撞检测点进行反向变换,得到变换后的碰撞检测点;
将所述变换后的碰撞检测点,从所述世界空间转换为所述参考动态虚拟物件所处局部空间中的点,得到所述局部空间中的目标点。
15.根据权利要求12所述的方法,其特征在于,所述碰撞检测点对应有多个参考动态虚拟物件,所述多个参考动态虚拟物件中包括至少一个形状规则的参考动态虚拟物件和至少一个形状不规则的参考动态虚拟物件,所述物件层信息是在所述参考动态虚拟物件为不规则形状情况下获取的;
所述根据所述目标点,从所述物件层信息所指示的层中确定所述碰撞检测点对应的单元格空间中的层,获得所述碰撞检测点的碰撞检测结果,包括:
针对形状不规则的所述参考动态虚拟物件,根据所述目标点从所述物件层信息所指示的层中获取各参考层;
获取形状规则的所述参考动态虚拟物件与经过所述碰撞检测点的射线的各交点,得到各参考交点;
根据各所述参考层和各所述参考交点,确定所述碰撞检测点对应的单元格空间中的各层;
基于所述碰撞检测点所对应的单元格空间中的各层,确定所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
16.一种碰撞检测装置,其特征在于,所述装置包括:
第一物件确定模块,用于获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的目标动态虚拟物件;
第一参数获取模块,用于获取所述目标动态虚拟物件的空间变换参数;所述空间变换参数表征所述目标动态虚拟物件从初始空间状态变换到当前空间状态的方式;
第一信息获取模块,用于获取所述目标动态虚拟物件在所述初始空间状态下时在所述目标动态虚拟物件的局部空间中的物件层信息;所述物件层信息,指示所述目标动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,所述层表征所述目标动态虚拟物件在所述单元格空间中占用的空间;
射线得到模块,用于根据所述空间变换参数,修正在世界空间下从所述碰撞检测点所对应的单元格发出的射线,得到在所述局部空间中的目标射线;
第一结果得到模块,用于基于所述物件层信息所指示的层中与所述目标射线相交的层,获得所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括层信息生成模块,所述层信息生成模块,用于:
在所述目标动态虚拟物件所处的局部空间中参考平面上分布二维网格,得到局部二维网格;
确定处于初始空间状态的所述目标动态虚拟物件在所述参考平面上的投影区域占据的每个局部单元格,得到各目标局部单元格;
针对每个所述目标局部单元格,基于从所述目标局部单元格发出的射线和所述目标动态虚拟物件,生成所述目标局部单元格对应的单元格层信息;
根据各所述目标局部单元格对应的单元格层信息,生成所述目标动态虚拟物件的物件层信息。
18.根据权利要求17所述的装置,其特征在于,所述层信息生成模块,还用于:
基于所述目标局部单元格生成第一射线;所述第一射线从所述目标局部单元格发出且与所述参考平面垂直;
获取所述第一射线穿入所述目标动态虚拟物件时的高度以及所述第一射线穿出所述目标动态虚拟物件时的高度,得到各高度;
获取各所述高度的标签;每个所述高度的标签为第一预设标签或第二预设标签中的一个,所述第一预设标签,表征穿入所述目标动态虚拟物件,所述第二预设标签,表征穿出所述目标动态虚拟物件;
根据各所述高度的标签,生成所述目标局部单元格对应的单元格层信息。
19.根据权利要求18所述的装置,其特征在于,所述层信息生成模块,还用于:
按照从小到大的顺序对各所述高度进行排列,生成高度序列;
从所述高度序列中确定目标高度;所述目标高度的标签为第二预设标签,且所述目标高度的下一高度的标签为第一预设标签;
在所述目标高度和所述目标高度的下一高度之间,将所述高度序列切分得到多个高度子序列;
针对每个所述高度子序列,将所述高度子序列中起始高度作为层的下边界高度,并将所述高度子序列中终止高度作为层的上边界高度,生成所述高度子序列对应的层信息;
根据每个所述高度子序列对应的层信息得到所述目标局部单元格对应的单元格层信息。
20.根据权利要求16所述的装置,其特征在于,所述第一物件确定模块,还用于:
确定所述碰撞检测点在所述虚拟场景所处世界空间中预设平面上的投影点所处的全局单元格,得到目标全局单元格;所述全局单元格是指全局二维网格中的单元格,所述全局二维网格是在所述预设平面上分布的二维网格;
基于所述目标全局单元格生成第二射线;所述第二射线从所述目标全局单元格发出且垂直于所述预设平面;
从所述虚拟场景中获取与所述第二射线相交的动态虚拟物件,得到用于参与碰撞检测的目标动态虚拟物件。
21.根据权利要求20所述的装置,其特征在于,所述射线得到模块,还用于:
根据所述空间变换参数对所述第二射线进行反向变换;所述反向变换是与正向变换相反的变换,所述正向变换是指根据所述空间变换参数对所述目标动态虚拟物件进行的变换;
将反向变换后所得到的射线,转换为所述局部空间中的目标射线。
22.根据权利要求16所述的装置,其特征在于,所述碰撞检测点对应有多个目标动态虚拟物件,所述多个目标动态虚拟物件中包括至少一个形状规则的目标动态虚拟物件和至少一个形状不规则的目标动态虚拟物件,所述物件层信息是在所述目标动态虚拟物件为不规则形状情况下获取的;
所述第一结果得到模块,还用于:
针对形状不规则的所述目标动态虚拟物件,基于所述物件层信息所指示的层中与所述目标射线相交的层,得到目标层;
获取形状规则的所述目标动态虚拟物件与经过所述碰撞检测点的射线的各交点,得到各目标交点;
根据各所述目标层和各所述目标交点,确定所述碰撞检测点所对应的单元格空间中的各层;
基于所述碰撞检测点所对应的单元格空间中的各层,确定所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
23.根据权利要求22所述的装置,其特征在于,所述空间变换参数中包括目标方向上的缩放参数,所述目标方向是指在所述在世界空间下从所述碰撞检测点所对应的单元格发出的射线的方向;
所述第一结果得到模块,还用于:
从所述物件层信息所指示的层中获取与所述目标射线相交的层,得到相交层;
根据所述缩放参数对所述相交层进行缩放处理得到目标层。
24.根据权利要求16所述的装置,其特征在于,所述装置还包括:
位置得到模块,用于响应于在所述虚拟场景中触发的物件操作,获取所述物件操作的位置得到操作位置;
第三物件确定模块,用于根据所述操作位置从所述虚拟场景中各动态虚拟物件中确定用于参与碰撞检测的碰撞检测物件;
第三结果得到模块,用于基于所述碰撞检测物件的空间变换参数和所述碰撞检测物件的物件层信息,得到所述操作位置的碰撞检测结果;
操作执行模块,用于在所述碰撞检测结果为发生碰撞的情况下,针对所述碰撞检测物件执行所述物件操作。
25.根据权利要求24所述的装置,其特征在于,所述第三物件确定模块,还用于:
从所述虚拟场景的观察位置向所述操作位置发射射线,得到观察射线;
从所述虚拟场景中各动态虚拟物件的包围盒中确定所述观察射线击中的首个包围盒,得到目标包围盒;
将所述目标包围盒所属的动态虚拟物件,确定为用于参与碰撞检测的碰撞检测物件。
26.根据权利要求25所述的装置,其特征在于,所述第三结果得到模块,还用于:
根据所述碰撞检测物件的空间变换参数,将所述观察射线转换为所述碰撞检测物件的局部空间中的局部观察射线;
根据所述局部观察射线与所述碰撞检测物件的物件层信息指示的层之间的关系,得到所述操作位置的碰撞检测结果。
27.一种碰撞检测装置,其特征在于,所述装置包括:
第二物件确定模块,用于获取虚拟场景中的碰撞检测点,并根据所述碰撞检测点从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;
第二参数获取模块,用于获取所述参考动态虚拟物件的空间变换参数;所述空间变换参数表征所述参考动态虚拟物件从初始空间状态变换到当前空间状态的方式;
第二信息获取模块,用于获取所述参考动态虚拟物件在所述初始空间状态下时在所述参考动态虚拟物件的局部空间中的物件层信息;所述物件层信息,指示所述参考动态虚拟物件在参考平面上投影占用的单元格所延伸形成单元格空间中的层,所述层表征所述参考动态虚拟物件在所述单元格空间中占用的空间;
检测点变换模块,用于基于所述空间变换参数,将所述参考动态虚拟物件所处世界空间中的所述碰撞检测点变换为所述局部空间中的目标点;
第二结果得到模块,用于根据所述目标点,从所述物件层信息所指示的层中确定所述碰撞检测点对应的单元格空间中的层,获得所述碰撞检测点的碰撞检测结果。
28.根据权利要求27所述的装置,其特征在于,所述第二物件确定模块,还用于:
将所述虚拟场景在所处世界空间中预设平面上占用的平面区域划分为多个单位区域;
获取所述碰撞检测点在所述预设平面上的投影位置所属的单位区域,得到目标单位区域;
根据所述目标单位区域从所述虚拟场景中确定用于参与碰撞检测的参考动态虚拟物件;所述参考动态虚拟物件在所述预设平面上的投影区域与所述目标单位区域相交。
29.根据权利要求27所述的装置,其特征在于,所述检测点变换模块,还用于:
根据所述空间变换参数对所述碰撞检测点进行反向变换,得到变换后的碰撞检测点;
将所述变换后的碰撞检测点,从所述世界空间转换为所述参考动态虚拟物件所处局部空间中的点,得到所述局部空间中的目标点。
30.根据权利要求27所述的装置,其特征在于,所述碰撞检测点对应有多个参考动态虚拟物件,所述多个参考动态虚拟物件中包括至少一个形状规则的参考动态虚拟物件和至少一个形状不规则的参考动态虚拟物件,所述物件层信息是在所述参考动态虚拟物件为不规则形状情况下获取的;
所述第二结果得到模块,还用于:
针对形状不规则的所述参考动态虚拟物件,根据所述目标点从所述物件层信息所指示的层中获取各参考层;
获取形状规则的所述参考动态虚拟物件与经过所述碰撞检测点的射线的各交点,得到各参考交点;
根据各所述参考层和各所述参考交点,确定所述碰撞检测点对应的单元格空间中的各层;
基于所述碰撞检测点所对应的单元格空间中的各层,确定所述碰撞检测点在所述虚拟场景中的碰撞检测结果。
31.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至15中任一项所述的方法的步骤。
32.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至15中任一项所述的方法的步骤。
33.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至15中任一项所述的方法的步骤。
CN202311640275.7A 2023-12-04 2023-12-04 碰撞检测方法、装置、计算机设备和存储介质 Active CN117392358B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311640275.7A CN117392358B (zh) 2023-12-04 2023-12-04 碰撞检测方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311640275.7A CN117392358B (zh) 2023-12-04 2023-12-04 碰撞检测方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN117392358A CN117392358A (zh) 2024-01-12
CN117392358B true CN117392358B (zh) 2024-04-09

Family

ID=89439545

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311640275.7A Active CN117392358B (zh) 2023-12-04 2023-12-04 碰撞检测方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN117392358B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012171572A (ja) * 2011-02-24 2012-09-10 Fuji Heavy Ind Ltd 内装部材
CN103529959A (zh) * 2013-01-21 2014-01-22 Tcl集团股份有限公司 基于关键点射线碰撞检测的框选方法、系统及电子设备
US8979652B1 (en) * 2014-03-27 2015-03-17 TECHLAND Sp. z o. o Natural movement in a virtual environment
US10571926B1 (en) * 2016-08-29 2020-02-25 Trifo, Inc. Autonomous platform guidance systems with auxiliary sensors and obstacle avoidance
CN111652908A (zh) * 2020-04-17 2020-09-11 国网山西省电力公司晋中供电公司 一种虚拟现实场景的操作碰撞检测方法
CN115430153A (zh) * 2022-08-30 2022-12-06 不鸣科技(杭州)有限公司 虚拟环境中的碰撞检测方法、装置、设备、介质及程序

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050231512A1 (en) * 2004-04-16 2005-10-20 Niles Gregory E Animation of an object using behaviors
US10709979B2 (en) * 2018-06-11 2020-07-14 Nintendo Co., Ltd. Systems and methods for adjusting a stereoscopic effect
US11335058B2 (en) * 2020-10-13 2022-05-17 Electronic Arts Inc. Spatial partitioning for graphics rendering

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012171572A (ja) * 2011-02-24 2012-09-10 Fuji Heavy Ind Ltd 内装部材
CN103529959A (zh) * 2013-01-21 2014-01-22 Tcl集团股份有限公司 基于关键点射线碰撞检测的框选方法、系统及电子设备
US8979652B1 (en) * 2014-03-27 2015-03-17 TECHLAND Sp. z o. o Natural movement in a virtual environment
US10571926B1 (en) * 2016-08-29 2020-02-25 Trifo, Inc. Autonomous platform guidance systems with auxiliary sensors and obstacle avoidance
CN111652908A (zh) * 2020-04-17 2020-09-11 国网山西省电力公司晋中供电公司 一种虚拟现实场景的操作碰撞检测方法
CN115430153A (zh) * 2022-08-30 2022-12-06 不鸣科技(杭州)有限公司 虚拟环境中的碰撞检测方法、装置、设备、介质及程序

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
实时碰撞检测算法综述;邹益胜等;计算机应用研究;20080115(01);第8-12页 *

Also Published As

Publication number Publication date
CN117392358A (zh) 2024-01-12

Similar Documents

Publication Publication Date Title
US9024947B2 (en) Rendering and navigating photographic panoramas with depth information in a geographic information system
CN102622776B (zh) 三维环境重构
CN105453139A (zh) 用于3d表面重建的稀疏gpu体素化
CN116051713B (zh) 渲染方法、电子设备和计算机可读存储介质
CN110503718A (zh) 三维工程模型轻量化显示方法
US20230053462A1 (en) Image rendering method and apparatus, device, medium, and computer program product
WO2024027237A1 (zh) 渲染的优化方法、电子设备和计算机可读存储介质
Ren et al. Octree-gs: Towards consistent real-time rendering with lod-structured 3d gaussians
CN108230430B (zh) 云层遮罩图的处理方法及装置
Masood et al. High‐performance virtual globe GPU terrain rendering using game engine
CN116109803B (zh) 信息构建方法、装置、设备及存储介质
CN115631320B (zh) 预计算单元格显示方法、预计算单元格生成方法及装置
CN117392358B (zh) 碰撞检测方法、装置、计算机设备和存储介质
Luo et al. Quad-tree atlas ray casting: a gpu based framework for terrain visualization and its applications
CN115830202A (zh) 一种三维模型渲染方法和装置
CN114781140A (zh) 激光雷达点云仿真方法、装置和计算机设备
TWI621960B (zh) 產生資料之視覺效果的方法
Lu Unreal engine nanite foliage shadow imposter
Hempe et al. Generation and rendering of interactive ground vegetation for real-time testing and validation of computer vision algorithms
CN116824068B (zh) 面向复杂动态场景中点云流的实时重建方法、装置及设备
CN117830587B (zh) 地图标注的绘制方法、装置、计算机设备和存储介质
CN117557711B (zh) 可视域的确定方法、装置、计算机设备、存储介质
CN115423917B (zh) 一种全球三维风场实时绘制方法及系统
CN116778049A (zh) 图像渲染方法、装置、计算机设备和存储介质
Liao et al. Research on Fast Visibility Judgment Algorithms Based on n-Fork Tree

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant