我阅读了this教程进行了aabb-plane测试,而且我无法理解"优化" aabb-plane测试描述。
在"几何方法 - 测试盒II",我理解一切,直到这一行:
假设AAB的组分x,y和z在xmin之间变化 和xmax; ymin和ymax;和zmin和zmax。的组成部分 选择正顶点p如下:...
我也没有得到之后的代码。 我的AABB对象由它们的minVertex,maxVertex参数定义。
你能解释一下作者的意思吗?
答案 0 :(得分:1)
考虑以下图片,其中对角线PS
(假设)与normal
向量平行(BTW,这是教程称之为AAB
的情况)。这张图片代表了问题的2D版本,其中的想法更容易解释和理解。
根据定义,p-vertex
是与法线方向进一步对齐的R - Q, Q - R, P - S or S - P (1)
。这意味着您必须确定以下四个向量中的哪一个与法线进一步对齐:
S - P
在这种情况下,答案为S
,这意味着p-vertex
是P
而n-vertex
是(xn, yn)
。但问题是如何以编程方式检测它。
嗯,两个向量之间的dot product测量其中一个向量的投影到另一个向量,因此问题可以重新表述为:(1)中的哪个向量具有正态的最大点积{ {1}}?
以下是四点产品:
(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的结果。
如果您处于3个维度,这些参数仍然有效。唯一的区别是你必须在任何地方添加z
坐标。