我读到this aabb-plane 测试教程,我无法理解所描述的“优化”aabb-plane 测试。
在“几何方法 - 测试盒 II”下,我理解了所有内容,直到这一行:
Assume a AAB that has its components x,y,and z varying between xmin and xmax; ymin and ymax; and zmin and zmax. The components of the positive vertex p are selected as follows: ...
我也没有得到后面的代码。 我的 AABB 对象由其 minVertex、maxVertex 参数定义。
你能解释一下作者的意思吗?
最佳答案
考虑下面的图片,其中对角线PS
(据说)与 normal
平行向量(顺便说一句,这就是教程中所说的 AAB
案例)。这张图代表了问题的 2D 版本,其中的想法更容易解释和理解。
p-vertex
根据定义,是与法线方向进一步对齐的方向。这意味着您必须决定以下四个向量中的哪一个与法线进一步对齐:
R - Q, Q - R, P - S or S - P (1)
在本例中答案是 S - P
,这意味着S
是p-vertex
和P
n-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
)
原因是符号规则(+
乘+ = +
和-
乘- = +
。)
所有这些都转化为
- 以
p-vertex = (x1, y1)
开头 - 如果
xn > 0
,更改x1
与x2
(有效地离开p-vertex = (x2, y1)
) - 如果
yn > 0
,更改y1
与y2
(有效地离开p-vertex = (x*, y2)
)
(在步骤 3 中,x*
是 x1
或 x2
,具体取决于 setp 2 的结果)
如果您处于三维空间,这些论点仍然有效。唯一的区别是你必须添加 z
坐标无处不在。
关于math - 测试视锥体相交中的轴对齐框 (AAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577445/