实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统的制作方法_4

文档序号:9751049阅读:来源:国知局
[0109] 转化模块1302用于将虚拟场景中虚拟对象所对应的圆柱碰撞体转化为与圆柱碰 撞体同中心点的预设多边形棱柱。
[0110] 具体地,虚拟对象可为实时虚拟场景中可以动态运行的人物或物体等。将虚拟对 象配置为圆柱碰撞体。碰撞体是用于计算物体之间是否碰撞的物体,即实际参与碰撞算法 计算的物体。 Com]将圆柱碰撞体转化为预设多边形棱柱时,预设多边形棱柱与圆柱碰撞体的竖直方 向的中心轴相同。预设多边形棱柱的中心与圆柱碰撞体的中心点相同,且预设多边形棱柱 的上下底面和圆柱碰撞体的上下底面的中心相同。
[0112] 预设多边形可为正多边形。正多边形边的条数可为5、6、7、8、9、16、32等,不限于 此。正多边形边的条数为2的指数时便于计算机处理,如8边形、16边形、32边形、64边形等。
[0113] 变换模块1304用于将该预设多边形棱柱变换到凸体的局部坐标系,得到预设多边 形棱柱在凸体的局部坐标系下的位置。
[0114] 本实施例中,将圆柱体变换到凸体Element的局部坐标系,实际上市将原有的X、Y、 Z三个轴变换到凸体的局部坐标系,同时也将中心点变换到凸体的局部坐标系,再根据X、Y、 Ζ三个轴变换的结果,重建圆柱碰撞体在凸体的局部坐标系下的位置,即预设多边形棱柱变 换到凸体的局部坐标系,得到预设多边形棱柱在凸体的局部坐标系下的位置。预设多边形 棱柱以十六边形棱柱为例,则根据X、Υ、Ζ三个轴、中心点在凸体的局部坐标系下的对应向 量,计算出十六棱柱对应的三十二个顶点的坐标,根据三十二个顶点组成十八个面四十八 条边。
[0115] 本实施例中,变换模块1304还用于将预设多边形棱柱的X轴、Υ轴、Ζ轴及中心点变 换到凸体的局部坐标系,得到预设多边形棱柱的X轴、Υ轴、Ζ轴的单位向量在凸体的局部坐 标系下对应的向量,并用Ζ轴在凸体的局部坐标系下向量乘以圆柱碰撞体的正负半高值,得 到预设多边形棱柱的上下两个底面的中点坐标;获取圆柱碰撞体的半径,根据圆柱碰撞体 的半径、X轴、Υ轴在凸体的局部坐标系下对应的向量得到预设多边形棱柱的各顶点相对所 在底面的中点的偏移量,将偏移量与中点坐标求和得到对应顶点的坐标;根据各个顶点的 坐标在凸体的局部坐标系下重建预设多边形棱柱。
[0116] 具体地,圆柱碰撞体的半径采用R表示。采用三角函数、圆柱碰撞体的半径R、X轴、Υ 轴在凸体的局部坐标系下对应的向量相乘,得到十六边形棱柱的上下底面的十六边形的各 个顶点相对于所对应中点坐标的偏移量,也就是上底面的十六个顶点相对于上底面的中点 坐标的偏移量,下底面的十六个顶点相对于下底面的中点坐标的偏移量。将偏移量加上对 应的中点坐标可得到对应的顶点坐标。具体地,各个顶点的坐标求出后,上底面的各个顶点 依次相连组成上底面,下底面的各个顶点依次相连组成下底面,上底面和下底面中对应的 顶点相连形成棱柱的一条棱。如此,将三十二个顶点组成了十八个面四十八条边。
[0117] 通过将圆柱碰撞体的X、Υ、Z轴变换到凸体的局部坐标系下,以及圆柱碰撞体的中 心点变换到凸体的局部坐标系下,根据圆柱碰撞体的X、Y、Z轴在凸体的局部坐标系下对应 的向量、中心点坐标及圆柱碰撞体的半径及半高等计算得出圆柱碰撞体转化的预设多边形 棱柱在凸体的局部坐标系下的位置,计算简单,计算量小,性能高。
[0118] 第一获取模块1306用于根据该预设多边形棱柱在凸体的局部坐标系下的位置获 取预设多边形棱柱各个面的法向、预设多边形的边方向和棱柱的棱的边方向。
[0119] 具体地,面的法向是指垂直于面的法向量。边方向是指边的两端延伸方向,方向可 作为相同。将预设多边形的边方向和棱柱的棱的边方向做向量积可得到对应面的法向。
[0120] 第二获取模块1308用于获取该凸体的各个面的法向和各个边方向。
[0121 ]具体地,凸体可为有向盒或凸多面体,有向盒是指长方体或正方体等。凸多面体可 为多边形棱柱等。
[0122] 向量积获取模块1310用于将该凸体的各个边方向与该预设多边形的边方向和棱 柱的棱的边方向分别做向量积。
[0123] 具体地,将凸体的每个边方向分别与预设多边形的边方向做向量积,凸体的每个 边方向分别与棱柱的棱的边方向做向量积。
[0124] 测试轴获取模块1312用于将该预设多边形棱柱各个面的法向、凸体的各个面的法 向及该向量积作为测试轴。
[0125] 具体地,测试轴可包括预设多边形棱柱的各个面的法向、凸体的各个面的法向、凸 体的各个边方向与预设多边形的边方向的向量积、凸体的各个边方向与预设多边形棱柱的 棱的边方向的向量积中一种或多种。
[0126] 投影模块1314用于根据各测试轴及预设多边形棱柱在凸体的局部坐标系下的位 置得到圆柱碰撞体在测试轴上的投影长度及投影位置,并获取凸体在各测试轴上的投影。
[0127] 本实施例中,投影模块1314还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸 体的局部坐标系后不为圆柱碰撞体,则对预设多边形棱柱在凸体的局部坐标系下的各个顶 点进行投影,取极值做差得到圆柱碰撞体的投影长度。
[0128] 具体地,以十六多边形棱柱为例,对在凸体的局部坐标系下的十六多边形棱柱的 三十二个顶点进行投影,取极值,得到最大极值顶点和最小极值顶点,求取最大极值顶点和 最小极值顶点投影后的差值的绝对值作为圆柱碰撞体的投影长度。
[0129] 投影模块1314还用于当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐 标系后仍为圆柱碰撞体,则获取圆柱碰撞体的半径、半高、圆柱碰撞体的XYZ三个轴的基向 量变换到凸体的局部坐标系下对应的坐标基向量以及测试轴在圆柱碰撞体的局部坐标系 下的测试轴方向计算圆柱碰撞体的投影长度。
[0130] 具体地,圆柱碰撞体在与圆柱的竖直轴平行的面上没有经过非等比缩放,也没有 经过错切变换,即圆柱碰撞体经过变换之后还是圆柱碰撞体,则采用6^_ ExtentOnAxisForRealCylinder()函数计算投影长度。
[0131 ] FArbitraryAxisCylinder: :GetExtentOnAxis()函数中,对于变换之后还是圆柱 体,GetExtent0nAxis()会调用GetExtent0nAxisForRealCylinderO计算投影长度。以M表 示把圆柱从圆柱的局部坐标系变换到凸体Element的局部坐标系的矩阵,则if 1就是从凸体 Element的局部坐标系变换到圆柱局部坐标系的矩阵。传入的测试轴InAxis是凸体Element 的局部坐标系下的,所以令LiInAxiMiT1,则L为测试轴在圆柱的局部坐标系下的测试轴方 向。以CT表示圆柱碰撞体的三个基向量变换到凸体Element局部坐标系之后的坐标基向量 (有三个成员X、Y、Z),则算法如式(1):
[0132]
[0133] 式(1)中,R表不圆柱碰撞体的半径,L.x表不L的X分量,L.y表不L的y分量,|L.z I表 示L的z分量的绝对值,|CT.f|表示CT的X基向量的长度,|CT.f|表示CT的Y基向量的长度, CTi|表示CT的Z基向量的长度,Η表示圆柱碰撞体的半高(即高度的一半)。
[0134] 当圆柱碰撞体转换的预设多边形棱柱变换到凸体的局部坐标系后仍为圆柱碰撞 体,圆柱碰撞体的投影长度可通过如下过程计算得到:取圆柱碰撞体的三个基向量变换到 凸体Element局部坐标系的坐标基向量的X基向量的长度和Υ基向量的长度中大值,再乘以 圆柱碰撞体的半径,再乘以测试轴在圆柱的局部坐标系下的测试轴方向的X分量和y分量的 平方根,得到第一乘积值;将圆柱碰撞体的三个基向量变换到凸体Element局部坐标系的坐 标基向量的Z基向量的长度乘以圆柱碰撞体的半高,再乘以测试轴在圆柱的局部坐标系下 的测试轴方向的z分量的绝对值,得到第二乘积值;求取第一乘积值和第二乘积值的和,将 该和作为圆柱碰撞体的投影长度。
[0135] 进一步的,当测试轴平行于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴 的基向量变换到凸体的局部坐标系下对应的坐标基向量的Z轴基向量的长度与半高的乘积 作为圆柱碰撞体的投影长度。
[0136] 具体地,将|cri|·//作为圆柱碰撞体的投影长度。
[0137] 进一步的,当测试轴垂直于圆柱碰撞体的竖直轴,则获取圆柱碰撞体的XYZ三个轴 的基向量变换到凸体的局部坐标系下对应的坐标基向量的X、Y轴基向量的长度中较大的一 个,再与圆柱碰撞体半径的乘积作为圆柱碰撞体的投影长度。
[0138] 具体地,将111叫|〇^|,|(^.1|)|?:作为圆柱碰撞体的投影长度。理论上_:肩:和 CT'fj相等,但实际计算中可能存在矩阵运算的精度误差,为保证碰撞探测结果不出现 false negative,一般取两者的较大值。
[0139] 判定模块1316用于若该圆柱碰撞体和凸体在各测试轴上投影均相交,则判定圆柱 碰撞体与凸体之间有碰撞。
[0140] 具体地,若圆柱碰撞体和凸体在各个测试轴上投影都相交,则判定圆柱碰撞体与 凸体之间有碰撞,若存在测试轴,使得圆柱碰撞体与凸体的投影不相交,则可判定圆柱碰撞 体与凸体之间没有碰撞。
[0141 ]上述实时虚拟场景中圆柱碰撞体与凸体之间碰撞探测的装置,将实时虚拟场景中 的虚拟对象作为圆柱碰撞体与凸体进行碰撞探测,碰撞探测是为了避免碰撞体碰撞,代替 了原来的轴对齐包围盒与凸体进行碰撞探测,圆柱碰撞体在凸体处只需移动较
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1