这是我显示边界框的代码
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);
}
如果没有旋转,上面的代码就可以工作。随着旋转事情搞砸了。任何想法为什么以及如何修复它?
答案 0 :(得分:0)
您无法在Xna中旋转BoundingBox对象。 BoundingBox类的内置碰撞检测方法将始终从min&amp ;;仅限轴对齐的框的最大值。通过改变min&amp; max,你不是在旋转盒子,你只是改变了轴对齐盒子的x,y,z尺寸。
你可能最好不要研究“定向边界框”。您可以通过使用角作为顶点并在'DrawIndexedPrimitives'方法中选择'LineList'作为PrimitiveType而不是'TriangleList'来绘制一个方向框。定向盒的碰撞检测是不同的。比轴对齐框更复杂。