【问题标题】:Testing Axis Aligned Boxes (AAB) in frustum intersection在平截头体相交中测试轴对齐框 (AAB)
【发布时间】:2015-11-08 00:35:20
【问题描述】:

我阅读了this aabb-plane 测试教程,但我无法理解所描述的“优化”aabb-plane 测试。

在“几何方法 - 测试盒 II”下,我理解了直到这一行的所有内容:

假设 AAB 的分量 x、y 和 z 在 xmin 之间变化 和 xmax; ymin 和 ymax;和 zmin 和 zmax。的组成部分 正顶点 p 的选择如下: ...

我也没有得到之后的代码。 我的 AABB 对象由它们的 minVertex、maxVertex 参数定义。

你能解释一下作者的意思吗?

【问题讨论】:

    标签: math collision-detection


    【解决方案1】:

    考虑下图,其中对角线 PS (假设)平行于 normal 向量(顺便说一句,这就是本教程所说的 AAB 案例)。这张图片代表了问题的 2D 版本,其中的想法更易于解释和理解。

    根据定义,p-vertex 是与法线方向进一步对齐的那个。这意味着您必须决定以下四个向量中的哪一个与法线进一步对齐:

    R - Q, Q - R, P - S or S - P                        (1)
    

    在这种情况下,答案是S - P,这意味着Sp-vertexPn-vertex。但问题是如何以编程方式检测到这一点。

    嗯,两个向量之间的dot product 测量其中一个向量到另一个向量的投影,因此问题可以重述为:(1) 中的哪个向量与正常(xn, yn) 的点积最大?

    以下是四个点积:

    (xn, yn).(R - Q) = xn(x1 - x2) + yn(y1 - y2)
    (xn, yn).(Q - R) = xn(x2 - x1) + yn(y2 - y1)
    (xn, yn).(P - S) = xn(x1 - x2) + yn(y2 - y1)
    (xn, yn).(S - P) = xn(x2 - x1) + yn(y1 - y2)
    

    所以,我们正在寻找的那个是使总和的两项都为正的那个,这是

    • 如果xn > 0 选择x2 - x1 (>0) 否则x1 - x2 (<0)
    • 如果yn > 0 选择y2 - y1 (>0) 否则y1 - y2 (<0)

    原因是符号规则(+ 乘以 + = +- 乘以 - = +。)

    所有这些都转化为

    1. p-vertex = (x1, y1)开头
    2. 如果xn > 0,将x1 更改为x2(实际上是离开p-vertex = (x2, y1)
    3. 如果yn > 0,将y1 更改为y2(实际上是离开p-vertex = (x*, y2)

    (在步骤 3 中,x*x1x2,具体取决于 setp 2 的结果)

    如果您处于 3 维中,这些参数仍然有效。唯一的区别是你必须在任何地方添加z 坐标。

    【讨论】:

    • 有趣,我应该从作者写的短代码 sn-p 中理解所有这些吗? :P。谢谢!
    • @Pilpel 不要责怪作者。他们可能知道他们可以转发令人惊叹的 StackOverflow 社区。事实上,每个作者都应该依靠它。
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多