如何旋转BoundingBox

时间:2012-12-08 11:53:03

标签: c# xna

这是我显示边界框的代码

 Vector3[] corners = box.GetCorners();
        for (int i = 0; i < 8; i++)
        {
            verts[i].Position = Vector3.Transform(corners[i],modelMatrix);
            verts[i].Color = Color.White;
        }

        vbo.SetData(verts);
        ibo.SetData(indices);

        foreach (EffectPass pass in effect.CurrentTechnique.Passes)
        {
            effect.World = Matrix.Identity; 
            effect.View = view;
            effect.Projection = projection;

            pass.Apply();
            ContentLoader.SetBuffers(ibo, vbo);
        }

我想使用BoundingBox类获得相同的结果。 我尝试这样做,但它不起作用

        for (int i = 0; i < boundingBoxes.Count; i++)
        {
            Vector3 min = Vector3.Transform(boundingBoxes[i].Min, modelMatrix);
            Vector3 max = Vector3.Transform(boundingBoxes[i].Max, modelMatrix);
            boundingBoxes[i] = new BoundingBox(min, max);
        }

如果没有旋转,上面的代码就可以工作。随着旋转事情搞砸了。任何想法为什么以及如何修复它?

1 个答案:

答案 0 :(得分:0)

您无法在Xna中旋转BoundingBox对象。 BoundingBox类的内置碰撞检测方法将始终从min&amp ;;仅限轴对齐的框的最大值。通过改变min&amp; max,你不是在旋转盒子,你只是改变了轴对齐盒子的x,y,z尺寸。

你可能最好不要研究“定向边界框”。您可以通过使用角作为顶点并在'DrawIndexedPrimitives'方法中选择'LineList'作为PrimitiveType而不是'TriangleList'来绘制一个方向框。定向盒的碰撞检测是不同的。比轴对齐框更复杂。