【问题标题】:XNA BoundingBox NOT intersectingXNA BoundingBox 不相交
【发布时间】:2013-12-10 11:13:23
【问题描述】:

我想弄清楚为什么我的大盒子不包含小盒子。

我有以下几点:

BoundingBox b = new BoundingBox(new Vector3(soldier.Position.X - 0.3f, soldier.Position.Y, soldier.Position.Z + 0.2f), new Vector3(soldier.Position.X + 0.3f, soldier.Position.Y + 1.8f, soldier.Position.Z - 0.2f));
BoundingBox b2 = new BoundingBox(new Vector3(soldier.Position.X - 0.015f, soldier.Position.Y + 0.01f, soldier.Position.Z + 0.07f), new Vector3(soldier.Position.X + 0.015f, soldier.Position.Y + 0.015f, soldier.Position.Z - 0.055f));
Console.WriteLine(b.Contains(b2));
Console.WriteLine(soldier.Position);

BoundingBoxRenderer.Render(b, GraphicsDevice, cam.View, cam.Projection, Color.Red);
BoundingBoxRenderer.Render(b2, GraphicsDevice, cam.View, cam.Projection, Color.White);

它会打印“不相交”。但是,较小的盒子 (b2) 肯定在较大的盒子 (b) 内。打印脱节是有原因的吗?

它在红框(b)内绘制白框(b2)就好了。 但是,它会打印:

Disjoint {X:22.5 Y:0 Z:-21.5}

我的边界框有问题吗?

【问题讨论】:

    标签: c# 3d xna collision-detection


    【解决方案1】:

    我的边界框有问题吗?

    是的。你的盒子里里外外。 对于所有边界框; min.x 必须小于 max.x 的值。 min.y 必须小于 max.y 的值。 min.z 必须小于 max.z。

    但是对于您的两个框,min.z 的值大于 max.z。由于这与要求的相反,这将导致您的盒子出现故障。

    为什么它看起来可以正确渲染?

    也许您的渲染代码有问题,它否定了 Z 组件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多