1

我正在开发的游戏中有一个非常基本的物理引擎,介于移动的圆柱形角色和由三角形组成的静态网格之间。预期的行为是让角色在表面上滑动,并且在大多数情况下,它可以正常工作。但是引擎不会区分正面碰撞和侧视碰撞。

我不完全确定我可以提供哪些有用的信息。无论如何,我正在寻找一种数学解决方案,一种确定任意圆柱体和三角形之间“接触角”的方法。我的直觉,或者其他什么,告诉我我需要找到三角形和圆柱体之间的接触点,然后确定该点是在三角形内(使用三角形的常规法线)还是沿着它的一条边(使用角度在接触点和气缸上的某个点之间,我不确定是哪个。),但我确信有更好的解决方案。

在此处输入图像描述

根据要求,这里有几个例子。在第一个图像中,一个圆柱体向下移动到一个三角形(在这个例子中,三角形是垂直的,简化为一条线。)我使用公式将速度矢量投影到三角形的平面上Vf = V - N * (dot(V,N))。这是此类碰撞的预期行为。

在此处输入图像描述

在此图像中,圆柱体的轴与三角形的法线平行。在当前实现下,Vf 仍然使用三角形的自然法线确定,这将导致圆柱体开始垂直移动。在预期的行为下,N 将垂直于三角形的碰撞边缘。

但这只是碰撞的两个极端。会有一堆中间人,所以我需要一个更随意的解决方案。

在此处输入图像描述

这是我对更多 3D 示例的尝试。我为糟糕的观点道歉。这个三角形中最底部的顶点更靠近“相机”。圆柱体和三角形之间的碰撞点用红色 X 标记。在预期行为下,如果圆柱体直接远离相机移动,它将沿着三角形边缘的长度向左滑动。不会产生垂直运动,因为接触点是沿着圆柱体的,呃,管部分,而不是盖。

在当前行为下,使用三角形的法线。圆柱体将被向上推,就好像滑过三角形的面一样,同时几乎没有阻止运动进入三角形。

我知道这是一个困难的要求,所以我很感激为帮助完善我的问题而提出的建议。

4

1 回答 1

0

您正在寻找的可能是边缘碰撞检测器。在刚体碰撞系统中,通常有两种类型的碰撞:表面碰撞(用于与具有规则表面法线的物体碰撞,正如您所指出的,通过处理 A 速度与 B 表面法线可以轻松计算反应法线) 和边缘碰撞(A 体碰撞 B 体的边缘,无论是盒子、三角形还是其他任何东西)。在这种情况下,事情就更复杂了,因为很明显,边缘不是一个表面,因此你不能算了算正常。通常,它以一种或另一种方式近似 - 例如,您可以假设,对于三角形网格,边缘法线是两个边缘三角形的法线之间的平均值。还有其他方法可以处理它,这里讨论了一些:

https://code.google.com/p/bullet/downloads/detail?name=CEDEC2011_ErwinCoumans.pdf&can=2&q=

通常,有一个边缘处理阈值,如果在该值的半径范围内发生碰撞,则认为是边缘碰撞,并进行不同的处理。

请参阅此处的示例:http: //www.wildbunny.co.uk/blog/2012/10/31/2d-polygonal-collision-detection-and-internal-edges/

谷歌搜索“内部边缘碰撞”并了解一般的刚体碰撞/动力学将帮助您自己理解和解决这个问题。

于 2014-11-08T12:46:03.763 回答