【发布时间】:2010-01-31 19:48:47
【问题描述】:
我们来回答另一个问题。
在上一个之后,我终于完成了kDop系统和相关的一切。 (kDop的层次树等。) 一切正常。
现在我想在屏幕上绘制碰撞以进行调试并查看工作结果。 (查看我在特定模式下所做的分层选择是否正常)
对于 AABB/Sphere 没问题,它非常容易创建。 问题在于 kDOP...
我有:
轴
(1,0,0)(0,1,0)(0,0,1)(1,1,1)(-1,1,1)(1,-1,1)(1,1,- 1)(1,1,0)(1,0,1),(0,1,1),(1,-1,0),(1,0,-1),(0,1,-1 )
以及使用坐标区计算的最小值/最大值。
如何使用这些数据创建一系列多边形(实际上是一个简单的网格)? (我不关心实现,我只是想从理论上理解它以便我可以实现它)
非常感谢您的回答!!!
编辑:我可以轻松计算网格的法线,因为我已经有了轴。问题是计算顶点位置...
编辑 2:我在网上发现这段代码似乎很有用(或者至少在文档中说它用于创建调试网格),但我不知道如何使用它来查找顶点位置:
real Kdop::getDistanceOfPlaneToOrigin(int k) const {
if (k < 0 || k >= mK) {
return 0.0f;
}
if (k >= mK/2) {
return (real) (mDistances[k] * -1.0);
}
return mDistances[k];
}
编辑 3:我想有了法线和一个点(原点,我确信飞机经过),我可以构建与操作相关的所有飞机......现在我需要更多东西...... .
【问题讨论】:
-
给定一个正常的 n 和到原点的距离 d,你基本上得到了你的平面坐标。如果您的法线是,呃,归一化,点 p 的平面方程是:n.p - d = 0(您可以根据您关心的平面的哪一侧将其更改为不等式......)
-
... 如果您的正常 没有 标准化,请使用:n.p - d|n| = 0
标签: c# c++ math directx collision-detection