【问题标题】:Xna Create BoundingBox Detection Manually?Xna 手动创建边界框检测?
【发布时间】:2013-04-14 22:05:44
【问题描述】:
所以我设法创建并成功测试了边界框。我现在在vector[] corners = new vector[8] 和vector[] corners1 = new vector[8] 中得到了所有 8 个角点,只是想知道代码是什么而不是 model.intersect(model1)。我之所以要这样做是因为希望我可以更改向量中的一些点以使我的模型上升。
【问题讨论】:
标签:
xna
xna-4.0
bounding-box
bounding
【解决方案1】:
首先...您有一个 BoundingBox 结构,可以为您处理 AABB 碰撞... ...
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.boundingbox.aspx
其次……如果你想自己做,
-
如果您只需要检查 AABB 碰撞,只需确定边界框中每个顶点的最小和最大坐标,以与边界最小和最大进行比较...
foreach (vertex in vertices) {
Min.X = Min(Min.X, vertex.X);
Min.Y = Min(Min.Y, vertex.Y);
....
// Idem for max
}
bool collide(BoundingBox other)
{
if (min.X > other.max.X) return false;
if (min.y > other.max.y) return false;
....
}
-
如果需要检查A和B对象的obb碰撞,只需将B顶点转换为A空间,并在A空间工作
BVertexInASpace = B.WorldVertex.Select( v => Matrix.Transform(v, A.TransformInverted));
在 A 空间中,最小顶点为 (0,0,0),最大顶点为 (width, height, depth),因此您只需检查 BVertexInASpace 顶点是否在内部...