0

ここに境界ボックスを表示するための私のコードがあります

 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);
        }

上記のコードは、回転がない場合に機能します。回転すると、問題が発生します。理由と修正方法はありますか?

4

1 に答える 1

-1

Xna で BoundingBox オブジェクトを回転させることはできません。BoundingBox クラスのビルトインの衝突検出メソッドは、軸の位置合わせのみでボックスの最小値と最大値から常に計算されます。最小値と最大値を変換することで、ボックスを回転させるのではなく、軸に合わせたボックスの x、y、z 寸法を変更するだけです。

「指向性バウンディングボックス」について勉強したほうがいいかもしれません。角を頂点として使用し、'DrawIndexedPrimitives' メソッドで 'TriangleList' の代わりに 'LineList' を PrimitiveType として選択することにより、方向付けられたボックスを描画します。方向付けられたボックスの衝突検出は、軸が整列したボックスとは異なり、より複雑です。

于 2012-12-08T17:41:57.243 に答える