CN105512377B - 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 - Google Patents
实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 Download PDFInfo
- Publication number
- CN105512377B CN105512377B CN201510864339.0A CN201510864339A CN105512377B CN 105512377 B CN105512377 B CN 105512377B CN 201510864339 A CN201510864339 A CN 201510864339A CN 105512377 B CN105512377 B CN 105512377B
- Authority
- CN
- China
- Prior art keywords
- prism
- polygon
- convex body
- default
- coordinate system
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 57
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000012360 testing method Methods 0.000 claims abstract description 91
- 239000013598 vector Substances 0.000 claims description 107
- 238000006243 chemical reaction Methods 0.000 claims description 17
- 230000009466 transformation Effects 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 7
- 238000000844 transformation Methods 0.000 claims description 6
- 238000006073 displacement reaction Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 18
- 239000011159 matrix material Substances 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 9
- 238000003860 storage Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- ZLHLYESIHSHXGM-UHFFFAOYSA-N 4,6-dimethyl-1h-imidazo[1,2-a]purin-9-one Chemical compound N=1C(C)=CN(C2=O)C=1N(C)C1=C2NC=N1 ZLHLYESIHSHXGM-UHFFFAOYSA-N 0.000 description 4
- 230000004888 barrier function Effects 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000002775 capsule Substances 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/20—Linear translation of whole images or parts thereof, e.g. panning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/13—Edge detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/246—Analysis of motion using feature-based methods, e.g. the tracking of corners or segments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/70—Determining position or orientation of objects or cameras
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B25—HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
- B25J—MANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
- B25J9/00—Programme-controlled manipulators
- B25J9/16—Programme controls
- B25J9/1656—Programme controls characterised by programming, planning systems for manipulators
- B25J9/1664—Programme controls characterised by programming, planning systems for manipulators characterised by motion, path, trajectory planning
- B25J9/1666—Avoiding collision or forbidden zones
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B25—HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
- B25J—MANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
- B25J9/00—Programme-controlled manipulators
- B25J9/16—Programme controls
- B25J9/1674—Programme controls characterised by safety, monitoring, diagnostic
- B25J9/1676—Avoiding collision or forbidden zones
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2111/00—Details relating to CAD techniques
- G06F2111/10—Numerical modelling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/80—2D [Two Dimensional] animation, e.g. using sprites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20112—Image segmentation details
- G06T2207/20164—Salient point detection; Corner detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Multimedia (AREA)
- Processing Or Creating Images (AREA)
- Robotics (AREA)
- Mechanical Engineering (AREA)
- Architecture (AREA)
Abstract
本发明涉及一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法和装置。所述方法包括以下步骤:将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱;将预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置;获取测试轴;根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;若圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。上述实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法和装置,缩短了移动距离,提高了移动效率、操作的流畅度以及判断的准确性。
Description
技术领域
本发明涉及计算机应用领域,特别是涉及一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法和装置。
背景技术
虚拟场景是指通过计算机模拟出来的场景,例如游戏场景、动漫场景等。以游戏场景为例,当一个虚拟对象遇到一个障碍物,需要绕过该障碍物,即虚拟对象与障碍物之间的碰撞,传统的处理方式是将虚拟对象和障碍物都简化处理为轴对齐包围盒的碰撞体,如图1所示,虚拟对象简化成的碰撞体110要绕过墙角120,则按照图中所示的移动变化过程,需要等碰撞体110在整个移出墙角后,才能继续沿着墙的下边沿前进。
然而,这样的碰撞体110碰撞路过墙角时会让操作者操作不顺畅,需要控制碰撞体移动整个身体才能越过墙角,移动效率低。
发明内容
基于此,有必要针对传统的碰撞体之间碰撞操作不顺畅且移动效率低的问题,提供一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法,能提高操作的流畅度,且能提高移动效率。
此外,还有必要提供一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,能提高操作的流畅度,且能提高移动效率。
一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法,包括以下步骤:
将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱;
将所述预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置;
根据所述预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向;
获取所述凸体的各个面的法向和各个边方向;
将所述凸体的各个边方向与所述预设多边形的边方向和棱柱的棱的边方向分别做向量积;
将所述预设多边形棱柱各个面的法向、凸体的各个面的法向及所述向量积中一种或多种作为测试轴;
根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;
若所述圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,包括:
转化模块,用于将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱;
变换模块,用于将所述预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置;
第一获取模块,用于根据所述预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向;
第二获取模块,用于获取所述凸体的各个面的法向和各个边方向;
向量积获取模块,用于将所述凸体的各个边方向与所述预设多边形的边方向和棱柱的棱的边方向分别做向量积;
测试轴获取模块,用于将所述预设多边形棱柱各个面的法向、凸体的各个面的法向及所述向量积一种或多种作为测试轴;
投影模块,用于根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;
判定模块,用于若所述圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
上述实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法和装置,将虚拟场景中的虚拟对象作为圆柱碰撞体与凸体进行碰撞,代替了原来的轴对齐包围盒与凸体进行碰撞,缩短了移动距离,提高了移动效率,也提高了操作的流畅度,将圆柱碰撞体转化为预设多边形棱柱,可得到圆柱碰撞体的面的法向和边方向,便于选取测试轴,通过测试轴的合理选择,以及圆柱碰撞体和凸体在测试轴上的投影相交情况判断圆柱碰撞体和凸体之间的碰撞情况,提高了判断的准确性。
附图说明
图1为传统的实时虚拟场景中碰撞体之间碰撞的过程示意图;
图2为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测方法及装置的应用环境示意图;
图3A为一个实施例中终端的内部结构示意图;
图3B为一个实施例中服务器的内部结构示意图;
图4为Component类包含的场景对象的示意图;
图5为两凸体投影在同一轴上不相交的示意图;
图6为圆柱碰撞体的示意图;
图7为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法的流程图;
图8为正八棱柱俯视示意图;
图9为一个实施例中将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置步骤的具体流程图;
图10为获取八多边形棱柱的顶点示意图;
图11为八边形棱柱的法向获取示意图;
图12为采用圆柱碰撞体碰撞使用传统的算法效果和理论结果示意图;
图13为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图2为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测方法及装置的应用环境示意图。如图2所示,该应用环境包括终端210和服务器220,终端210可为多个。多个终端210与服务器220进行通信。实时虚拟场景中碰撞体之间碰撞探测的方法可运行于终端210上,终端210从服务器220上获取虚拟场景数据,终端210获取虚拟场景中凸体和虚拟对象所对应的圆柱碰撞体,对凸体和圆柱碰撞体进行碰撞探测。实时虚拟场景可为实时游戏场景或实时动漫场景等,虚拟对象可为人物或物体。凸体可为人物或物体等。
图3A为一个实施例中终端210的内部结构示意图。如图3A所示,该终端210包括通过系统总线连接的处理器、存储介质、内存和网络接口、声音采集装置、显示屏、扬声器和输入装置。其中,终端的存储介质存储有操作系统,还包括一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置,该实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置用于实现一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测方法。该处理器用于提供计算和控制能力,支撑整个终端的运行。终端中的内存为存储介质中的实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置的运行提供环境,网络接口用于与服务器进行网络通信,如发送数据请求至服务器,接收服务器返回的相应数据等。终端的显示屏可以是液晶显示屏或者电子墨水显示屏等,输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。该终端可以是手机、台式计算机、平板电脑或者个人数字助理等。本领域技术人员可以理解,图3A中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
图3B为一个实施例中服务器220的内部结构示意图。如图3B所示,该服务器包括通过系统总线连接的处理器、存储介质、内存、网络接口、显示屏、输入装置。其中,该服务器的存储介质存储有操作系统、数据库和实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置,数据库中存储有实时虚拟场景数据等,该实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置用于实现适用于服务器的一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测方法。该服务器的处理器用于提供计算和控制能力,支撑整个服务器的运行。该服务器的内存为存储介质中的实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测装置的运行提供环境。该服务器的显示屏可以是液晶显示屏或者电子墨水显示屏等,输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。该服务器的网络接口用于据以与外部的终端通过网络连接通信,比如接收终端发送的数据交互请求以及向终端返回数据等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本领域技术人员可以理解,图3B中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的服务器的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在其他应用环境中,可只包括终端210或服务器220,即实时虚拟场景中碰撞体之间的碰撞的方法可只需运行于终端或服务器上,例如单机的游戏场景或动漫场景中虚拟对象的移动等。用户在终端上运行下载的单机游戏或测试人员在服务器上测试单机游戏等。
为了便于探测碰撞体之间碰撞,在实时虚拟场景中,表示玩家控制的虚拟角色和其他一些移动物体(如手雷、摄像机等)都是Actor类及其子类的对象,为此采用轴对齐进行碰撞探测。为了改变虚拟角色的碰撞体,修改Actor类,让虚拟角色使用圆柱碰撞体,非角色Actor使用轴对齐包围盒进行碰撞探测。在实时虚拟场景中,场景对象主要有两种,即包括BSP场景对象和Component场景对象。按照不同的场景对象分类存储,即将对象分为BSP或Component。在碰撞探测时,采用碰撞探测的入口函数Uworld::MoveActor()按照场景对象分类做粗裁剪,判断该分类哪些对象可能会和传入的Actor对象碰撞体发生碰撞,然后再做精细碰撞探测并获得返回结果。其中,粗裁剪是指做粗碰撞。精细碰撞是指按照下面所述的实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法实现圆柱碰撞体与凸体(即Component场景对象)之间进行精细碰撞探测,碰撞探测结束后,采用Check系列函数将碰撞探测结果汇总给Uworld::MoveActor(),由其进一步汇总后用于后续计算,如状态改变、伤害计算等。在Component场景对象,以圆柱取代轴对齐包围盒作为传入MoveActor()的碰撞体。实时虚拟场景可包括游戏场景、动漫场景等,也可应用于实时游戏场景中,不限于此。
每个Component场景对象包含若干Element类的对象,Element有FKBoxElem、FKSphereElem、FKSphylElem和FKConvexElem,分别表示有向盒、球体、胶囊体和凸多面体,如图4所示,Component类包含的Element类对象。Element是Component对象里的碰撞体,都是凸体,采用分离轴测试算法(Separating Axis Test)计算圆柱碰撞体与凸体之间碰撞探测的情况。分离轴测试算法的理论依据是,若两个凸体没有相交,则一定可以找出一个轴,使得两个凸体在这个轴上的投影也不相交,如图5所示,两个凸体投影在同一轴上且没有相交。
增加Actor类用来存储圆柱碰撞体的成员变量。在这种情况下,假设Actor的圆柱碰撞体是(世界坐标系的)竖直圆柱,采用Cylinder类表示。图6为一个实施例中圆柱碰撞体的示意图。如图6所示,采用Cylinder类表示竖直圆柱,在Cylinder类里,采用横线62表示Radius(半径),竖线64表示Height,取值为半高(即圆柱碰撞体高度值的一半)。
图7为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法的流程图。如图7所示,一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法,运行于图2中应用环境中,包括以下步骤:
步骤702,将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱。
具体地,虚拟对象可为实时虚拟场景中可以动态运行的人物或物体等。将虚拟对象配置为圆柱碰撞体。碰撞体是用于计算物体之间是否碰撞的物体,即实际参与碰撞算法计算的物体。
将圆柱碰撞体转化为预设多边形棱柱时,预设多边形棱柱与圆柱碰撞体的竖直方向的中心轴相同。预设多边形棱柱的中心与圆柱碰撞体的中心点相同,且预设多边形棱柱的上下底面和圆柱碰撞体的上下底面的中心相同。
预设多边形可为正多边形。正多边形边的条数可为5、6、7、8、9、16、32等,不限于此。正多边形边的条数为2的指数时便于计算机处理,如8边形、16边形、32边形、64边形等。
实时虚拟场景是指实时游戏场景或实时动漫场景等。实时游戏场景表示正在运行的游戏中的场景。实时动漫场景表示正在运行的动漫中的场景。碰撞探测是指探测碰撞体之间是否发生碰撞。碰撞发生后产生碰撞响应,即一碰撞体与另一碰撞体碰撞后无法沿原来的移动方向继续移动调整一碰撞体的移动方向以绕过另一碰撞体或一碰撞体击中另一碰撞体产生击中响应等。本实施例中,碰撞探测主要是指一碰撞体避免与另一碰撞体碰撞,调整一碰撞体的移动方向以绕过另一碰撞体。
碰撞体的大小可根据虚拟场景中虚拟对象的大小设置,例如虚拟对象为球体,则虚拟对象对应的圆柱碰撞体的高可设置球体的直径,圆柱体的半径可设置略大于球体的半径大小。
图8为正八棱柱俯视示意图。如图8所示,将圆柱碰撞体的圆柱体转化为八边形棱柱后,八边形棱柱的俯视示意图。外面的矩阵为圆柱碰撞体的AABB(Axis AlignedBounding Box,轴对齐包围盒)。
步骤704,将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置。
本实施例中,将圆柱体变换到凸体Element的局部坐标系,实际上是将原有的X、Y、Z三个轴变换到凸体的局部坐标系,同时也将中心点变换到凸体的局部坐标系,再根据X、Y、Z三个轴变换的结果,重建圆柱碰撞体在凸体的局部坐标系下的位置,即预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置。预设多边形棱柱以十六边形棱柱为例,则根据X、Y、Z三个轴、中心点在凸体的局部坐标系下的对应向量,计算出十六棱柱对应的三十二个顶点的坐标,根据三十二个顶点组成十八个面四十八条边。
通过ArbitraryAxisCylinder类处理坐标系变换,在ArbitraryAxisCylinder类增加用于变换到凸体Element局部坐标系的变换矩阵成员变量,以及变换过的圆柱碰撞体原本的X、Y、Z轴单位向量在凸体局部坐标系下的向量,用于快速判断圆柱碰撞体是否经过旋转、平移、伸缩等变换。在ArbitraryAxisCylinder类中,记录有Radius(半径),Height,新的X、Y、Z轴,中心点的位移。通过三个轴的变换结果可以判断圆柱碰撞体经过了怎样的变换,用于加速投影计算。中心点的位移可以计算投影的位置。
图9为一个实施例中将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置步骤的具体流程图。如图9所示,将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置包括:
步骤902,将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,得到预设多边形棱柱的X轴、Y轴、Z轴的单位向量在凸体的局部坐标系下对应的向量,并用Z轴在凸体的局部坐标系下向量乘以圆柱碰撞体的正负半高值,得到预设多边形棱柱的上下两个底面的中点坐标。
具体地,圆柱碰撞体的半高采用Height表示。
步骤904,获取圆柱碰撞体的半径,根据圆柱碰撞体的半径、X轴、Y轴在凸体的局部坐标系下对应的向量得到预设多边形棱柱的各顶点相对所在底面的中点的偏移量,将偏移量与中点坐标求和得到对应顶点的坐标。
具体地,圆柱碰撞体的半径采用R表示。采用三角函数、圆柱碰撞体的半径R、X轴、Y轴在凸体的局部坐标系下对应的向量相乘,得到十六边形棱柱的上下底面的十六边形的各个顶点相对于所对应中点坐标的偏移量,也就是上底面的十六个顶点相对于上底面的中点坐标的偏移量,下底面的十六个顶点相对于下底面的中点坐标的偏移量。将偏移量加上对应的中点坐标可得到对应的顶点坐标。
图10为获取八多边形棱柱的顶点示意图。如图10所示,1002为一个底面的中心点,1004为该底面的其中一个顶点。
步骤906,根据各个顶点的坐标在凸体的局部坐标系下重建预设多边形棱柱。
具体地,各个顶点的坐标求出后,上底面的各个顶点依次相连组成上底面,下底面的各个顶点依次相连组成下底面,上底面和下底面中对应的顶点相连形成棱柱的一条棱。如此,将三十二个顶点组成了十八个面四十八条边。
通过将圆柱碰撞体的X、Y、Z轴变换到凸体的局部坐标系下,以及圆柱碰撞体的中心点变换到凸体的局部坐标系下,根据圆柱碰撞体的X、Y、Z轴在凸体的局部坐标系下对应的向量、中心点坐标及圆柱碰撞体的半径及半高等计算得出圆柱碰撞体转化的预设多边形棱柱在凸体的局部坐标系下的位置,计算简单,计算量小,性能高。
需要说明的是,圆柱碰撞体若经过了错切变换,则需要将预设多边形棱柱的所有顶点在圆柱碰撞体的局部坐标系计算后,用矩阵运算变换到凸体的局部坐标系。错切变换是指使图形产生一个扭变。
步骤706,根据该预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向。
具体地,面的法向是指垂直于面的法向量。边方向是指边的两端延伸方向,方向可作为相同。将预设多边形的边方向和棱柱的棱的边方向做向量积可得到对应面的法向。
图11为八边形棱柱的法向获取示意图。如图11所示,根据得到的顶点1102和顶点1104的坐标可算出对应的边1106,再获取边1106的边方向,边方向是指该边两端延伸,任意延伸的方向即为该边的边方向。
步骤708,获取该凸体的各个面的法向和各个边方向。
具体地,凸体可为有向盒或凸多面体,有向盒是指长方体或正方体等。凸多面体可为多边形棱柱等。
步骤710,将该凸体的各个边方向与该预设多边形的边方向和棱柱的棱的边方向分别做向量积。
具体地,将凸体的每个边方向分别与预设多边形的边方向做向量积,凸体的每个边方向分别与棱柱的棱的边方向做向量积。
步骤712,将该预设多边形棱柱各个面的法向、凸体的各个面的法向及该向量积中一种或多种作为测试轴。
具体地,测试轴可包括预设多边形棱柱的各个面的法向、凸体的各个面的法向、凸体的各个边方向与预设多边形的边方向的向量积、凸体的各个边方向与预设多边形棱柱的棱的边方向的向量积中一种或多种。也就是,测试轴可选用预设多边形棱柱的各个面的法向,或者选择凸体的各个面的法向,或者选择凸体的各个边方向与预设多边形的边方向的向量积,或者选择凸体的各个边方向与预设多边形棱柱的棱的边方向的向量积,或者选择它们中的几种组合等。测试轴的选取若太少,可能会把不相交误报为相交,选得过多,则可能影响性能。
步骤714,根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影。
本实施例中,当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后不为圆柱碰撞体,则对预设多边形棱柱在凸体的局部坐标系下的各个顶点进行投影,取极值做差得到圆柱碰撞体的投影长度。
具体地,以十六多边形棱柱为例,对在凸体的局部坐标系下的十六多边形棱柱的三十二个顶点进行投影,取极值,得到最大极值顶点和最小极值顶点,求取最大极值顶点和最小极值顶点投影后的差值的绝对值作为圆柱碰撞体的投影长度。
当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,则获取圆柱碰撞体的半径、半高、圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量以及测试轴在圆柱碰撞体的局部坐标系下的测试轴方向计算圆柱碰撞体的投影长度。
具体地,圆柱碰撞体在与圆柱的竖直轴平行的面上没有经过非等比缩放,也没有经过错切变换,即圆柱碰撞体经过变换之后还是圆柱碰撞体,则采用Get-ExtentOnAxisForRealCylinder()函数计算投影长度。
FArbitraryAxisCylinder::GetExtentOnAxis()函数中,对于变换之后还是圆柱体,GetExtentOnAxis()会调用GetExtentOnAxisForRealCylinder()计算投影长度。以M表示把圆柱从圆柱的局部坐标系变换到凸体Element的局部坐标系的矩阵,则M-1就是从凸体Element的局部坐标系变换到圆柱局部坐标系的矩阵。传入的测试轴InAxis是凸体Element的局部坐标系下的,所以令L=InAxis*M-1,则L为测试轴在圆柱的局部坐标系下的测试轴方向。以CT表示圆柱碰撞体的三个基向量变换到凸体Element局部坐标系之后的坐标基向量(有三个成员X、Y、Z),则算法如式(1):
式(1)中,R表示圆柱碰撞体的半径,L.x表示L的x分量,L.y表示L的y分量,|L.z|表示L的z分量的绝对值,表示CT的X基向量的长度,表示CT的Y基向量的长度,表示CT的Z基向量的长度,H表示圆柱碰撞体的半高(即高度的一半)。
当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,圆柱碰撞体的投影长度可通过如下过程计算得到:取圆柱碰撞体的三个基向量变换到凸体Element局部坐标系的坐标基向量的X基向量的长度和Y基向量的长度中大值,再乘以圆柱碰撞体的半径,再乘以测试轴在圆柱的局部坐标系下的测试轴方向的x分量和y分量的平方根,得到第一乘积值;将圆柱碰撞体的三个基向量变换到凸体Element局部坐标系的坐标基向量的Z基向量的长度乘以圆柱碰撞体的半高,再乘以测试轴在圆柱的局部坐标系下的测试轴方向的z分量的绝对值,得到第二乘积值;求取第一乘积值和第二乘积值的和,将该和作为圆柱碰撞体的投影长度。
进一步的,当测试轴平行于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的Z轴基向量的长度与半高的乘积作为圆柱碰撞体的投影长度。
具体地,将作为圆柱碰撞体的投影长度。
进一步的,当测试轴垂直于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的X、Y轴基向量的长度中较大的一个,再与圆柱碰撞体半径的乘积作为圆柱碰撞体的投影长度。
具体地,将作为圆柱碰撞体的投影长度。理论上和相等,但实际计算中可能存在矩阵运算的精度误差,为保证碰撞探测结果不出现false negative,一般取两者的较大值。
步骤716,若该圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
具体地,若圆柱碰撞体和凸体在各个测试轴上投影都相交,则判定圆柱碰撞体与凸体之间有碰撞,若存在测试轴,使得圆柱碰撞体与凸体的投影不相交,则可判定圆柱碰撞体与凸体之间没有碰撞。
上述实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法,将实时虚拟场景中的虚拟对象作为圆柱碰撞体与凸体进行碰撞探测,碰撞探测是为了避免碰撞体碰撞,代替了原来的轴对齐包围盒与凸体进行碰撞探测,圆柱碰撞体在凸体处只需移动较短距离,因缩短了移动距离,故提高了移动效率,也提高了操作的流畅度,将圆柱碰撞体转化为预设多边形棱柱,可得到圆柱碰撞体的面的法向和边方向,便于选取测试轴,通过测试轴的合理选择,以及圆柱碰撞体和凸体在测试轴上的投影相交情况判断圆柱碰撞体和凸体之间的碰撞情况,提高了判断的准确性。
在一个实施例中,该预设多边形为内接圆柱碰撞体底面的正多边形。
具体地,正多边形边的条数可为5、6、7、8、9、16、32等,不限于此。正多边形边的条数为2的指数时便于计算机处理,如8边形、16边形、32边形、64边形等。正多边形可简化计算,节省计算资源。
进一步的,该正多边形为偶数条边的正多边形,则获取该预设多边形的边方向时,从预设多边形棱柱的上下底面的两个预设多边形中的一个预设多边形选取基于中心不对称的边方向,该获取棱柱的棱的边方向时选一条棱的边方向。
例如,以预设多边形棱柱为正十六边形棱柱为例,正十六边形棱柱的棱均平行,则只要选一条棱边,获取该棱的边方向。正十六边形棱柱的上底面和下底面平行,则只要选择一个底面中的边方向。对于每个底面来说,十六边形也是中心对称的,只要取八条边即可。
图12为采用圆柱碰撞体碰撞探测使用传统的算法效果和理论结果示意图。如图12所示,左图为采用圆柱碰撞体按照传统的算法进行碰撞探测,其仍然需要将圆柱碰撞体移出整个身体然后才能沿着黑色碰撞体底边移动,右图为采用圆柱碰撞体采用上述实时虚拟场景中碰撞体之间碰撞的方法后所能达到的理论结果,圆柱碰撞体在移动过程中移动的距离较短,移动效率高,且操作流畅。
下面结合具体的应用场景说明实时虚拟场景中碰撞体之间碰撞探测的方法的实现过程,以实时游戏场景为例,圆柱碰撞体为虚拟角色,凸体为墙体,结合图12,其中圆形为圆柱体的二维投影,黑体为凸体的二维投影。碰撞探测的过程包括:
(1)将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱;
(2)将预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置;
(3)根据预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向;
(4)获取凸体的各个面的法向和各个边方向;
(5)将凸体的各个边方向与预设多边形的边方向和棱柱的棱的边方向分别做向量积;
(6)将预设多边形棱柱各个面的法向、凸体的各个面的法向及所述向量积中一种或多种作为测试轴;
(7)根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;
(8)若圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
圆柱碰撞体投影的圆形与凸体进行碰撞探测,即得到圆柱碰撞体的移动路线,如图12所示。
图13为一个实施例中实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置的结构框图。如图13所示,一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,包括转化模块1302、变换模块1304、第一获取模块1306、第二获取模块1308、向量积获取模块1310、测试轴获取模块1312、投影模块1314、判定模块1316。其中:
转化模块1302用于将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱。
具体地,虚拟对象可为实时虚拟场景中可以动态运行的人物或物体等。将虚拟对象配置为圆柱碰撞体。碰撞体是用于计算物体之间是否碰撞的物体,即实际参与碰撞算法计算的物体。
将圆柱碰撞体转化为预设多边形棱柱时,预设多边形棱柱与圆柱碰撞体的竖直方向的中心轴相同。预设多边形棱柱的中心与圆柱碰撞体的中心点相同,且预设多边形棱柱的上下底面和圆柱碰撞体的上下底面的中心相同。
预设多边形可为正多边形。正多边形边的条数可为5、6、7、8、9、16、32等,不限于此。正多边形边的条数为2的指数时便于计算机处理,如8边形、16边形、32边形、64边形等。
变换模块1304用于将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置。
本实施例中,将圆柱体变换到凸体Element的局部坐标系,实际上是将原有的X、Y、Z三个轴变换到凸体的局部坐标系,同时也将中心点变换到凸体的局部坐标系,再根据X、Y、Z三个轴变换的结果,重建圆柱碰撞体在凸体的局部坐标系下的位置,即预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置。预设多边形棱柱以十六边形棱柱为例,则根据X、Y、Z三个轴、中心点在凸体的局部坐标系下的对应向量,计算出十六棱柱对应的三十二个顶点的坐标,根据三十二个顶点组成十八个面四十八条边。
本实施例中,变换模块1304还用于将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,得到预设多边形棱柱的X轴、Y轴、Z轴的单位向量在凸体的局部坐标系下对应的向量,并用Z轴在凸体的局部坐标系下向量乘以圆柱碰撞体的正负半高值,得到预设多边形棱柱的上下两个底面的中点坐标;获取圆柱碰撞体的半径,根据圆柱碰撞体的半径、X轴、Y轴在凸体的局部坐标系下对应的向量得到预设多边形棱柱的各顶点相对所在底面的中点的偏移量,将偏移量与中点坐标求和得到对应顶点的坐标;根据各个顶点的坐标在凸体的局部坐标系下重建预设多边形棱柱。
具体地,圆柱碰撞体的半径采用R表示。采用三角函数、圆柱碰撞体的半径R、X轴、Y轴在凸体的局部坐标系下对应的向量相乘,得到十六边形棱柱的上下底面的十六边形的各个顶点相对于所对应中点坐标的偏移量,也就是上底面的十六个顶点相对于上底面的中点坐标的偏移量,下底面的十六个顶点相对于下底面的中点坐标的偏移量。将偏移量加上对应的中点坐标可得到对应的顶点坐标。具体地,各个顶点的坐标求出后,上底面的各个顶点依次相连组成上底面,下底面的各个顶点依次相连组成下底面,上底面和下底面中对应的顶点相连形成棱柱的一条棱。如此,将三十二个顶点组成了十八个面四十八条边。
通过将圆柱碰撞体的X、Y、Z轴变换到凸体的局部坐标系下,以及圆柱碰撞体的中心点变换到凸体的局部坐标系下,根据圆柱碰撞体的X、Y、Z轴在凸体的局部坐标系下对应的向量、中心点坐标及圆柱碰撞体的半径及半高等计算得出圆柱碰撞体转化的预设多边形棱柱在凸体的局部坐标系下的位置,计算简单,计算量小,性能高。
第一获取模块1306用于根据该预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向。
具体地,面的法向是指垂直于面的法向量。边方向是指边的两端延伸方向,方向可作为相同。将预设多边形的边方向和棱柱的棱的边方向做向量积可得到对应面的法向。
第二获取模块1308用于获取该凸体的各个面的法向和各个边方向。
具体地,凸体可为有向盒或凸多面体,有向盒是指长方体或正方体等。凸多面体可为多边形棱柱等。
向量积获取模块1310用于将该凸体的各个边方向与该预设多边形的边方向和棱柱的棱的边方向分别做向量积。
具体地,将凸体的每个边方向分别与预设多边形的边方向做向量积,凸体的每个边方向分别与棱柱的棱的边方向做向量积。
测试轴获取模块1312用于将该预设多边形棱柱各个面的法向、凸体的各个面的法向及该向量积作为测试轴。
具体地,测试轴可包括预设多边形棱柱的各个面的法向、凸体的各个面的法向、凸体的各个边方向与预设多边形的边方向的向量积、凸体的各个边方向与预设多边形棱柱的棱的边方向的向量积中一种或多种。
投影模块1314用于根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影。
本实施例中,投影模块1314还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后不为圆柱碰撞体,则对预设多边形棱柱在凸体的局部坐标系下的各个顶点进行投影,取极值做差得到圆柱碰撞体的投影长度。
具体地,以十六多边形棱柱为例,对在凸体的局部坐标系下的十六多边形棱柱的三十二个顶点进行投影,取极值,得到最大极值顶点和最小极值顶点,求取最大极值顶点和最小极值顶点投影后的差值的绝对值作为圆柱碰撞体的投影长度。
投影模块1314还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,则获取圆柱碰撞体的半径、半高、圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量以及测试轴在圆柱碰撞体的局部坐标系下的测试轴方向计算圆柱碰撞体的投影长度。
具体地,圆柱碰撞体在与圆柱的竖直轴平行的面上没有经过非等比缩放,也没有经过错切变换,即圆柱碰撞体经过变换之后还是圆柱碰撞体,则采用Get-ExtentOnAxisForRealCylinder()函数计算投影长度。
FArbitraryAxisCylinder::GetExtentOnAxis()函数中,对于变换之后还是圆柱体,GetExtentOnAxis()会调用GetExtentOnAxisForRealCylinder()计算投影长度。以M表示把圆柱从圆柱的局部坐标系变换到凸体Element的局部坐标系的矩阵,则M-1就是从凸体Element的局部坐标系变换到圆柱局部坐标系的矩阵。传入的测试轴InAxis是凸体Element的局部坐标系下的,所以令L=InAxis*M-1,则L为测试轴在圆柱的局部坐标系下的测试轴方向。以CT表示圆柱碰撞体的三个基向量变换到凸体Element局部坐标系之后的坐标基向量(有三个成员X、Y、Z),则算法如式(1):
式(1)中,R表示圆柱碰撞体的半径,L.x表示L的x分量,L.y表示L的y分量,|L.z|表示L的z分量的绝对值,表示CT的X基向量的长度,表示CT的Y基向量的长度,表示CT的Z基向量的长度,H表示圆柱碰撞体的半高(即高度的一半)。
当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,圆柱碰撞体的投影长度可通过如下过程计算得到:取圆柱碰撞体的三个基向量变换到凸体Element局部坐标系的坐标基向量的X基向量的长度和Y基向量的长度中大值,再乘以圆柱碰撞体的半径,再乘以测试轴在圆柱的局部坐标系下的测试轴方向的x分量和y分量的平方根,得到第一乘积值;将圆柱碰撞体的三个基向量变换到凸体Element局部坐标系的坐标基向量的Z基向量的长度乘以圆柱碰撞体的半高,再乘以测试轴在圆柱的局部坐标系下的测试轴方向的z分量的绝对值,得到第二乘积值;求取第一乘积值和第二乘积值的和,将该和作为圆柱碰撞体的投影长度。
进一步的,当测试轴平行于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的Z轴基向量的长度与半高的乘积作为圆柱碰撞体的投影长度。
具体地,将作为圆柱碰撞体的投影长度。
进一步的,当测试轴垂直于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的X、Y轴基向量的长度中较大的一个,再与圆柱碰撞体半径的乘积作为圆柱碰撞体的投影长度。
具体地,将作为圆柱碰撞体的投影长度。理论上和相等,但实际计算中可能存在矩阵运算的精度误差,为保证碰撞探测结果不出现false negative,一般取两者的较大值。
判定模块1316用于若该圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
具体地,若圆柱碰撞体和凸体在各个测试轴上投影都相交,则判定圆柱碰撞体与凸体之间有碰撞,若存在测试轴,使得圆柱碰撞体与凸体的投影不相交,则可判定圆柱碰撞体与凸体之间没有碰撞。
上述实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,将实时虚拟场景中的虚拟对象作为圆柱碰撞体与凸体进行碰撞探测,碰撞探测是为了避免碰撞体碰撞,代替了原来的轴对齐包围盒与凸体进行碰撞探测,圆柱碰撞体在凸体处只需移动较短距离,因缩短了移动距离,故提高了移动效率,也提高了操作的流畅度,将圆柱碰撞体转化为预设多边形棱柱,可得到圆柱碰撞体的面的法向和边方向,便于选取测试轴,通过测试轴的合理选择,以及圆柱碰撞体和凸体在测试轴上的投影相交情况判断圆柱碰撞体和凸体之间的碰撞情况,提高了判断的准确性。
在一个实施例中,该预设多边形为内接圆柱碰撞体底面的正多边形。该正多边形为偶数条边的正多边形,则获取该预设多边形的边方向时,从预设多边形棱柱的上下底面的两个预设多边形中的一个预设多边形选取基于中心不对称的边方向,该获取棱柱的棱的边方向时选一条棱的边方向。
例如,以预设多边形棱柱为正十六边形棱柱为例,正十六边形棱柱的棱均平行,则只要选一条棱边,获取该棱的边方向。正十六边形棱柱的上底面和下底面平行,则只要选择一个底面中的边方向。对于每个底面来说,十六边形也是中心对称的,只要取八条边即可。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (14)
1.一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的方法,包括以下步骤:
将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱,其中,所述预设多边形棱柱的中心与圆柱碰撞体的中心点相同,且预设多边形棱柱的上下底面和圆柱碰撞体的上下底面的中心相同;
将所述预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置,将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,再根据X、Y、Z三个轴变换的结果,重建预设多边形棱柱在凸体的局部坐标系下的位置;
根据所述预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向,所述预设多边形为所述预设多边形棱柱的上下底面的预设多边形;
获取所述凸体的各个面的法向和各个边方向;
将所述凸体的各个边方向与所述预设多边形的边方向和棱柱的棱的边方向分别做向量积;
将所述预设多边形棱柱各个面的法向、凸体的各个面的法向、凸体的各个边方向与所述预设多边形的边方向的向量积、凸体的各个边方向与所述预设多边形棱柱的棱的边方向的向量积中一种或多种作为测试轴;
根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;
若所述圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
2.根据权利要求1所述的方法,其特征在于,将所述预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置的步骤包括:
将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,得到预设多边形棱柱的X轴、Y轴、Z轴的单位向量在凸体的局部坐标系下对应的向量,并用Z轴在凸体的局部坐标系下向量乘以圆柱碰撞体的正负半高值,得到预设多边形棱柱的上下两个底面的中点坐标;
获取圆柱碰撞体的半径,根据圆柱碰撞体的半径、X轴、Y轴在凸体的局部坐标系下对应的向量得到预设多边形棱柱的各顶点相对所在底面的中点的偏移量,将偏移量与中点坐标求和得到对应顶点的坐标;
根据各个顶点的坐标在凸体的局部坐标系下重建预设多边形棱柱。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后不为圆柱碰撞体,则对预设多边形棱柱在凸体的局部坐标系下的各个顶点进行投影,取极值做差得到圆柱碰撞体的投影长度。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,则获取圆柱碰撞体的半径、半高、圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量以及测试轴在圆柱碰撞体的局部坐标系下的测试轴方向计算圆柱碰撞体的投影长度。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
当测试轴平行于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的Z轴基向量的长度与半高的乘积作为圆柱碰撞体的投影长度;
当测试轴垂直于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的X、Y轴基向量的长度中较大的一个,再与圆柱碰撞体半径的乘积作为圆柱碰撞体的投影长度。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述预设多边形为内接圆柱碰撞体底面的正多边形。
7.根据权利要求6所述的方法,其特征在于,所述正多边形为偶数条边的正多边形,则获取所述预设多边形的边方向时,从预设多边形棱柱的上下底面的两个预设多边形中的一个预设多边形选取基于中心不对称的边方向,所述获取棱柱的棱的边方向时选一条棱的边方向。
8.一种实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,其特征在于,包括:
转化模块,用于将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰撞体同中心点的预设多边形棱柱,其中,所述预设多边形棱柱的中心与圆柱碰撞体的中心点相同,且预设多边形棱柱的上下底面和圆柱碰撞体的上下底面的中心相同;
变换模块,用于将所述预设多边形棱柱变换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置,将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,再根据X、Y、Z三个轴变换的结果,重建预设多边形棱柱在凸体的局部坐标系下的位置;
第一获取模块,用于根据所述预设多边形棱柱在凸体的局部坐标系下的位置获取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向,所述预设多边形为所述预设多边形棱柱的上下底面的预设多边形;
第二获取模块,用于获取所述凸体的各个面的法向和各个边方向;
向量积获取模块,用于将所述凸体的各个边方向与所述预设多边形的边方向和棱柱的棱的边方向分别做向量积;
测试轴获取模块,用于将所述预设多边形棱柱各个面的法向、凸体的各个面的法向、凸体的各个边方向与所述预设多边形的边方向的向量积、凸体的各个边方向与所述预设多边形棱柱的棱的边方向的向量积一种或多种作为测试轴;
投影模块,用于根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影;
判定模块,用于若所述圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱碰撞体与凸体之间有碰撞。
9.根据权利要求8所述的装置,其特征在于,所述变换模块还用于将预设多边形棱柱的X轴、Y轴、Z轴及中心点变换到凸体的局部坐标系,得到预设多边形棱柱的X轴、Y轴、Z轴的单位向量在凸体的局部坐标系下对应的向量,并用Z轴在凸体的局部坐标系下向量乘以圆柱碰撞体的正负半高值,得到预设多边形棱柱的上下两个底面的中点坐标;获取圆柱碰撞体的半径,根据圆柱碰撞体的半径、X轴、Y轴在凸体的局部坐标系下对应的向量得到预设多边形棱柱的各顶点相对所在底面的中点的偏移量,将偏移量与中点坐标求和得到对应顶点的坐标;根据各个顶点的坐标在凸体的局部坐标系下重建预设多边形棱柱。
10.根据权利要求9所述的装置,其特征在于,所述投影模块还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后不为圆柱碰撞体,则对预设多边形棱柱在凸体的局部坐标系下的各个顶点进行投影,取极值做差得到圆柱碰撞体的投影长度。
11.根据权利要求9所述的装置,其特征在于,所述投影模块还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞体,则获取圆柱碰撞体的半径、半高、圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量以及测试轴在圆柱碰撞体的局部坐标系下的测试轴方向计算圆柱碰撞体的投影长度。
12.根据权利要求8至11中任一项所述的装置,其特征在于,当测试轴平行于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的Z轴基向量的长度与半高的乘积作为圆柱碰撞体的投影长度;
当测试轴垂直于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴的基向量变换到凸体的局部坐标系下对应的坐标基向量的X、Y轴基向量的长度中较大的一个,再与圆柱碰撞体半径的乘积作为圆柱碰撞体的投影长度。
13.根据权利要求8至11中任一项所述的装置,其特征在于,所述预设多边形为内接圆柱碰撞体底面的正多边形。
14.根据权利要求13所述的装置,其特征在于,所述正多边形为偶数条边的正多边形,则获取所述预设多边形的边方向时,从预设多边形棱柱的上下底面的两个预设多边形中的一个预设多边形选取基于中心不对称的边方向,所述获取棱柱的棱的边方向时选一条棱的边方向。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510864339.0A CN105512377B (zh) | 2015-11-30 | 2015-11-30 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
PCT/CN2016/082930 WO2017092251A1 (zh) | 2015-11-30 | 2016-05-20 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法、终端和存储介质 |
JP2017558551A JP6480606B2 (ja) | 2015-11-30 | 2016-05-20 | リアルタイムの仮想シーン内の円柱コライダと凸体との間の衝突を検出するための方法および端末およびストレージ媒体 |
KR1020177037087A KR101986037B1 (ko) | 2015-11-30 | 2016-05-20 | 실시간 가상 장면에서 원통형 충돌기와 볼록형 바디 간의 충돌을 검출하기 위한 방법, 및 단말, 및 저장 매체 |
US15/785,186 US10311544B2 (en) | 2015-11-30 | 2017-10-16 | Method for detecting collision between cylindrical collider and convex body in real-time virtual scenario, terminal, and storage medium |
US16/393,838 US11301954B2 (en) | 2015-11-30 | 2019-04-24 | Method for detecting collision between cylindrical collider and convex body in real-time virtual scenario, terminal, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510864339.0A CN105512377B (zh) | 2015-11-30 | 2015-11-30 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105512377A CN105512377A (zh) | 2016-04-20 |
CN105512377B true CN105512377B (zh) | 2017-12-12 |
Family
ID=55720357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510864339.0A Active CN105512377B (zh) | 2015-11-30 | 2015-11-30 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10311544B2 (zh) |
JP (1) | JP6480606B2 (zh) |
KR (1) | KR101986037B1 (zh) |
CN (1) | CN105512377B (zh) |
WO (1) | WO2017092251A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512377B (zh) | 2015-11-30 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
CN108733065B (zh) * | 2017-09-29 | 2021-06-04 | 北京猎户星空科技有限公司 | 一种机器人的避障方法、装置及机器人 |
CN107553497B (zh) * | 2017-10-20 | 2023-12-22 | 苏州瑞得恩光能科技有限公司 | 太阳能面板清扫机器人的边缘定位装置及其定位方法 |
CN107907593B (zh) * | 2017-11-22 | 2020-09-22 | 中南大学 | 一种超声检测中机械手防碰撞方法 |
CN108364542A (zh) * | 2018-01-12 | 2018-08-03 | 重庆韦娜软件有限公司 | 叉车场地考试位置检测与判定装置及其方法 |
CN110174951B (zh) * | 2019-05-30 | 2022-06-21 | 郑州爱普锐科技有限公司 | 基于vr实训设备的人物动作识别方法 |
CN110221574B (zh) * | 2019-06-10 | 2021-05-11 | 中国神华能源股份有限公司 | 单机防碰撞的方法和系统 |
CN112200890B (zh) * | 2019-07-08 | 2023-09-29 | 福建天泉教育科技有限公司 | 基于Unity的碰撞器设置方法及存储介质 |
CN111199571A (zh) * | 2019-12-20 | 2020-05-26 | 江苏原力动画制作股份有限公司 | 一种基于连接关系的控制物体变形方法 |
CN111346379B (zh) * | 2020-03-12 | 2023-05-12 | 竞技世界(北京)网络技术有限公司 | 一种实现碰撞处理的方法及装置 |
CN111546376A (zh) * | 2020-04-22 | 2020-08-18 | 哈尔滨工业大学 | 一种空间组合机械臂的快速自碰撞检测方法 |
US11794107B2 (en) * | 2020-12-30 | 2023-10-24 | Activision Publishing, Inc. | Systems and methods for improved collision detection in video games |
CN113450400A (zh) * | 2021-06-28 | 2021-09-28 | 思享智汇(海南)科技有限责任公司 | 基于可变对象的碰撞检测方法、游戏交互方法及直播系统 |
CN114211498B (zh) * | 2021-12-30 | 2023-09-08 | 中国煤炭科工集团太原研究院有限公司 | 基于方向包围盒的锚杆支护机器人碰撞检测方法及系统 |
CN114872043B (zh) * | 2022-05-09 | 2023-11-17 | 苏州艾利特机器人有限公司 | 一种机器人碰撞检测方法、存储介质及电子设备 |
CN115861500B (zh) * | 2022-12-09 | 2023-08-18 | 上海哔哩哔哩科技有限公司 | 2d模型碰撞体生成方法及装置 |
CN118608730A (zh) * | 2024-07-25 | 2024-09-06 | 歌尔股份有限公司 | 碰撞检测方法、设备及可读存储介质 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6407748B1 (en) * | 1998-04-17 | 2002-06-18 | Sandia Corporation | Method and apparatus for modeling interactions |
US6266064B1 (en) * | 1998-05-29 | 2001-07-24 | Microsoft Corporation | Coherent visibility sorting and occlusion cycle detection for dynamic aggregate geometry |
US6708142B1 (en) * | 1999-01-14 | 2004-03-16 | University Of Central Florida | Automatic motion modeling of rigid bodies using collision detection |
US7353149B2 (en) * | 2001-04-25 | 2008-04-01 | Telekinesys Research Limited | Method and apparatus for simulating dynamic contact of objects |
US7694224B2 (en) * | 2001-05-31 | 2010-04-06 | International Business Machines Corporation | Location predicative restoration of compressed images stored on a hard disk drive with soft and hard errors |
JP2003346186A (ja) * | 2002-03-19 | 2003-12-05 | Sony Corp | 画像処理装置および方法、並びにプログラム |
US7788071B2 (en) * | 2004-12-03 | 2010-08-31 | Telekinesys Research Limited | Physics simulation apparatus and method |
US7493244B2 (en) * | 2005-03-23 | 2009-02-17 | Nvidia Corporation | Computer simulation of body dynamics including a solver that solves in linear time for a set of constraints using vector processing |
JP4192976B2 (ja) * | 2006-08-02 | 2008-12-10 | ソニー株式会社 | 接触形状算出装置及び接触形状算出方法、並びにコンピュータ・プログラム |
US9530246B2 (en) * | 2009-01-15 | 2016-12-27 | Mitsubishi Electric Corporation | Collision determination device and collision determination program |
JP5434651B2 (ja) * | 2010-02-12 | 2014-03-05 | 富士通株式会社 | 干渉判定装置、干渉判定方法および干渉判定プログラム |
CN102194248A (zh) * | 2011-05-05 | 2011-09-21 | 上海大学 | 基于增强现实的虚实碰撞检测及响应方法 |
JP5498437B2 (ja) * | 2011-05-25 | 2014-05-21 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、情報処理方法、情報処理プログラム、情報処理プログラムを記憶したコンピュータ読み取り可能な記録媒体、厚み領域設定装置、厚み領域設定方法、厚み領域設定プログラム、厚み領域設定プログラムを記憶したコンピュータ読み取り可能な記録媒体、仮想空間における面に関するデータ構造 |
CN102368280A (zh) * | 2011-10-21 | 2012-03-07 | 北京航空航天大学 | 一种面向虚拟装配的基于aabb-obb混合包围盒的碰撞检测方法 |
JP6069923B2 (ja) * | 2012-07-20 | 2017-02-01 | セイコーエプソン株式会社 | ロボットシステム、ロボット、ロボット制御装置 |
CN103679271B (zh) * | 2013-12-03 | 2016-08-17 | 大连大学 | 基于Bloch球面坐标及量子计算的碰撞检测方法 |
CN104156520B (zh) * | 2014-07-31 | 2017-04-12 | 哈尔滨工程大学 | 一种基于直线投影的凸多面体碰撞检测方法 |
CN105512377B (zh) * | 2015-11-30 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
-
2015
- 2015-11-30 CN CN201510864339.0A patent/CN105512377B/zh active Active
-
2016
- 2016-05-20 KR KR1020177037087A patent/KR101986037B1/ko active IP Right Grant
- 2016-05-20 WO PCT/CN2016/082930 patent/WO2017092251A1/zh active Application Filing
- 2016-05-20 JP JP2017558551A patent/JP6480606B2/ja active Active
-
2017
- 2017-10-16 US US15/785,186 patent/US10311544B2/en active Active
-
2019
- 2019-04-24 US US16/393,838 patent/US11301954B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
KR101986037B1 (ko) | 2019-06-04 |
US10311544B2 (en) | 2019-06-04 |
CN105512377A (zh) | 2016-04-20 |
WO2017092251A1 (zh) | 2017-06-08 |
US20190251657A1 (en) | 2019-08-15 |
JP2018524664A (ja) | 2018-08-30 |
JP6480606B2 (ja) | 2019-03-13 |
US20180040101A1 (en) | 2018-02-08 |
KR20180012792A (ko) | 2018-02-06 |
US11301954B2 (en) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105512377B (zh) | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 | |
CN105488851B (zh) | 实时虚拟场景中碰撞体之间碰撞探测的方法和装置 | |
CN111815755B (zh) | 虚拟物体被遮挡的区域确定方法、装置及终端设备 | |
CN110473293B (zh) | 虚拟对象处理方法及装置、存储介质和电子设备 | |
CN105531756A (zh) | 信息处理装置、信息处理方法和计算机程序 | |
CN112632683A (zh) | 基于虚幻引擎的数字孪生城市空间定位方法、装置及存储介质 | |
CN109364484A (zh) | 游戏角色移动测试方法及装置 | |
CN107450841A (zh) | 交互对象控制方法及装置 | |
CN102722910B (zh) | 一种基于分离轴剔除的体网格场景连续碰撞检测方法 | |
CN109918949A (zh) | 识别方法、装置、电子设备和存储介质 | |
CN108388636A (zh) | 基于自适应分段最小外接矩形的街景影像检索方法及装置 | |
CN110191316A (zh) | 一种信息处理方法及装置、设备、存储介质 | |
CN113426131B (zh) | 虚拟场景的画面生成方法、装置、计算机设备及存储介质 | |
CN112149287B (zh) | 一种面向负载均衡的交通仿真路网图形化分割方法及系统 | |
CN111599417B (zh) | 溶解度预测模型的训练数据获取方法及装置 | |
Tseng et al. | Development of intelligent tourism information system based on virtual reality | |
CN116109531A (zh) | 图像处理方法、装置、计算机设备及存储介质 | |
WO2022017778A1 (en) | Helper data for anchors in augmented reality | |
Prasetya et al. | Design of Immersive Virtual Tour application based on geospatial analysis | |
CN112007361A (zh) | 一种基于三维游戏引擎进行空间模型可视化渲染的方法 | |
Yan et al. | [Retracted] FastQR: Fast Pose Estimation of Objects Based on Multiple QR Codes and Monocular Vision in Mobile Embedded Devices | |
US10452149B2 (en) | Method for grading spatial painting, apparatus and system for grading spatial painting | |
CN109634497A (zh) | 地图标注点的呈现位置调整方法、装置、设备及存储介质 | |
JP7465976B2 (ja) | 衝突範囲決定方法並びにその、装置、機器、及びコンピュータプログラム | |
CN103679631B (zh) | 一种放大图像的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |