【问题标题】:Correct frustum aabb intersection正确的平截头体 aabb 交点
【发布时间】:2015-08-03 13:41:16
【问题描述】:

我需要 100% 正确的截头体 aabb 相交测试才能与截头体剔除一起使用。以下链接解释了为什么大多数实现在 100% 正确测试时失败并提供了解决方案。

http://iquilezles.org/www/articles/frustumcorrect/frustumcorrect.htm

但是,该解决方案甚至不是 100% 正确吗?你能想到一个失败的案例吗?我想我可以,但很难解释。如果您认为这不起作用,您能否提供更好的解决方案?

【问题讨论】:

    标签: opengl graphics directx lwjgl opentk


    【解决方案1】:

    你是对的,给定的解决方案不是 100% 正确的。

    他试图做的是所谓的分离轴定理(或Hyperplane separation theorem)。

    在前半部分,他正在测试由截锥体平面定义的轴,在后半部分,他正在测试由 AABB 定义的轴。这对 SAT 考试来说是正确且必需的。

    但他缺少的是由一对边的叉积定义的轴,每个多面体都有一个。 AABB 有 3 个独特的边(具有唯一方向的边)和一个平截头体有 6 个独特的边。因此代码缺少对 3*6=18 可能的分离轴的重叠测试。

    给定轴的单个重叠测试如下所示:

    • 将对象 A 的所有点投影到该轴上。这将导致间隔 I1。
    • 将对象 B 的所有点投影到该轴上。这将导致间隔 I2。
    • 如果 I1 不与 I2 重叠,则找到分离轴并且 A 不与 B 相交。
    • 如果 I1 与 I2 重叠,则这不是分离轴 -> 测试下一个轴。

    【讨论】:

    • 感谢您的回答。因为我想在使用它之前理解这个定理,所以我试图找到关于它为什么是我必须检查所有正常平面和交叉产品平面的信息。现在这对我来说似乎有点武断,但当然不是,只是想知道为什么。
    • 查看这个答案。他有一些关于为什么需要交叉乘积轴的漂亮图片。 gamedev.stackexchange.com/questions/44500/…
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多