我希望对象在两个物理模拟之间通过“窗口”移动,并在两个物体与窗口平面相交的情况下与两个模拟碰撞。
模拟的坐标系不具有相同的原点,并且可能具有不同的方向。将模拟本身包装起来不是必需的,但是会更好。
如何在不克隆单个对象的情况下有效地连接系统?
编辑:
计算应尽可能准确,这样,如果对象同时从相反的方向穿过窗口,则不会卡住。
我希望对象在两个物理模拟之间通过“窗口”移动,并在两个物体与窗口平面相交的情况下与两个模拟碰撞。
模拟的坐标系不具有相同的原点,并且可能具有不同的方向。将模拟本身包装起来不是必需的,但是会更好。
如何在不克隆单个对象的情况下有效地连接系统?
编辑:
计算应尽可能准确,这样,如果对象同时从相反的方向穿过窗口,则不会卡住。
Answers:
好的-我不知道这是否行得通。
基于以上信息,我将在“窗口”上放置触发器,以便可以检测到物体何时脱离世界。碰撞时抓取当前速度矢量。根据到达触发点的位置和结束该帧的位置计算剩余的时间步长(在世界范围内,您的世界需要一个虚拟边界来允许这样做)。此时,您知道了速度和剩余的时间,因此可以将其重新定位在即将进入的世界的边界上,并重新投影速度。但是,这将需要在一帧中进行两次物理更新,并且在同一位置存在一个对象从a到b而另一个对象从b到a的边界情况-根本不会检测到碰撞。
有点粗略
我阅读了一些有关物理模拟的信息,并找到了可能的解决方案。通过将每个物理步骤分为三个阶段来工作:
1.前置步骤:
在每个物理步骤中,都有一个窗口创建四个变换,每个连接边各两个:
(静态窗口只需要执行一次。)
此外,每个坐标系中的对象分为三组:
物理分组http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
窗口前面的对象(绿色)。
如果某个对象与窗口平面相交或可能从窗口后面穿过该对象(未显示),则该对象也计入该组。
在此物理步骤中,对象与窗口相交或可能与窗口相交(橙色)。
窗口后面的对象(蓝色)。如果有物体飞向窗口的背面,它仍被标记为第三组的成员。
如果窗口位于模拟的边界,则可以简化分组。
2.主要步骤:
物理计算通常照常进行,但有一些例外:
第二组的对象永远不会与第三组的对象发生碰撞,反之亦然。
窗口的输入转换用于第二组对象,并根据目标系统中的前向和相交对象评估结果。产生的力使用输出变换进行变换,并应用于原始对象。
(如果在计算过程中击中了一个对象,则必须将其重新分组!)
3.后续步骤:
如果来自第二组的对象已经越过窗口,则使用输入变换将其移动到目标系统中。
其他想法:
如果在计算物理量后保留了变换,则可以将其用于加速渲染并简化AI计算。分组可用于从渲染过程中删除裁剪平面。
该解决方案的缺点是必须将窗口直接添加到物理引擎中。