【发布时间】:2023-02-16 00:45:47
【问题描述】:
我正在努力理解/实施 James Arvo 的算法来转换 AABB,很好地给出了 in this answer。鉴于我们正在通过对象的平移和旋转来修改 AABB,这应该如何在每一帧上起作用?在算法中,我们最初将新的 AABB 设置为我们所在位置的零体积框。然而,当基于旧的 AABB 和我们的对象转换修改它时,我们不是将对象的翻译加倍吗?
如果我们假设没有旋转或缩放,我们的矩阵就变成了单位矩阵,这有望使我的观点(或误解)清楚:
new_min = new_max = position
// no need to iterate through matrix, since off diagonals are now 0, and on diagonals are 1
for i<3
a = old_min[i] // <- this is just previous frame's position AABB
b = old_max[i]
new_min += min(a,b)
new_max += max(a,b)
但是我们的 old_min 和 max 包含前一帧的位置信息,然后我们添加到当前帧的位置。当我尝试实现这一点时,这正是我发现的,我的 AABB 跑向了无穷大。
我误会了什么?
【问题讨论】:
标签: collision-detection game-physics game-development aabb