我试图弄清楚如何实现KD树。
在Ericson的“实时冲突检测”的第322页上
如果Google图书预览在您单击链接时看不到它,则下面包含文本部分
相关部分:
将光线或直线段与kd树相交的基本原理很简单。将该线与节点的分割平面相交,并计算相交的t值。如果t在直线的区间内,即0 <= t <= tmax,则直线横跨平面,并且树的两个子级都递归下降。如果不是,则仅递归访问包含片段原点的一侧。
所以这就是我所拥有的:(如果看不到字母,请在新标签页中打开图像)
逻辑树
在这里,橙色射线穿过3d场景。x代表与平面的交点。从左侧,射线击中:
- 场景的封闭立方体的正面,
- (1)分裂平面
- (2.2)分割平面
- 场景的封闭立方体的右侧
但是,天真地遵循了上面的Ericson的基本描述,这就是会发生的事情:
- 针对分裂平面(1)进行测试。射线束照射到分裂平面(1),因此下一个测试中将包含分裂平面(1)的左右子级。
- 针对分裂平面(2.1)进行测试。雷实际上击中了那架飞机(向右偏),所以两个孩子都被包括在下一级别的测试中。(这是违反直觉的-在后续测试中不应仅包括底部节点)
有人可以描述橙色光线正确穿过场景时会发生什么吗?