BoundingSphere更新

时间:2014-05-18 15:22:28

标签: c# 3d xna geometry bounding

你好我在XNA 4.0中写了关于蚂蚁的小RPG。我已经将LoadModel类设为fbx模型加载,并创建了边界球体。我在通过合并模型网格创建的模型中有一个通用的边界球体。现在我创建了带有额外球体的模型,它代表了我在游戏中的边界球体。我只是检查Mesh名称是否是“BoundingSphere”,当它是我将mesh.BoundingSphere添加到我的bs数组时。 现在我不知道如何更新那些bs ... 我的代码尝试:

 private void buildBoundingSphere()
    {

        BoundingSphere sphere = new BoundingSphere(Vector3.Zero, 0);
        List<BoundingSphere> spheres = new List<BoundingSphere>();
        foreach (ModelMesh mesh in Model.Meshes)
        {
            if (mesh.Name.Contains("BoundingSphere") )
            {
                BoundingSphere transformed = mesh.BoundingSphere.Transform(modelTransforms[mesh.ParentBone.Index])
            spheres.Add(transformed);
            sphere = BoundingSphere.CreateMerged(sphere, transformed);

            }
        }


        this.boundingSphere = sphere;
        this.spheres = spheres.ToArray();   
    }

现在,BoundingSphere数组得到/设置:

public BoundingSphere[] spheres
    {

        get
        {
            // No need for rotation, as this is a sphere
            List<BoundingSphere> spheres = new List<BoundingSphere>();
            foreach (ModelMesh mesh in Model.Meshes)
            {
                Matrix worldTransform = Matrix.CreateScale(Scale)* Matrix.CreateTranslation(Position);

                if (mesh.Name.Contains("BoundingSphere")) {

                BoundingSphere transformed = mesh.BoundingSphere.Transform(worldTransform);
                spheres.Add(transformed);
                }
            }

            return spheres.ToArray();
        }
        set{}
    }

我在模型中有2个球体,它们都在同一个地方。 谢谢你的提示。

1 个答案:

答案 0 :(得分:0)

首先,你的二传手是空的。如果您要使用自动生成的设置器,请使用set;代替set{}。所以你在buildBoundingSphere()中所做的一切都会丢失。首先验证。

另一个小问题是你的边界球体累加器是从原点开始的。这假设原点将在最终球体内,这通常不是真的。实际上,只要你知道第一个球体,你就应该以某种方式生成起始球体。

我无法从这个片段中说出更多内容。如果您要改变吸气剂中的所有球体,是否通过物体的当前变换?比例和位置似乎不依赖于它改变球体的网格,因此worldTransform矩阵的构造可以移动到循环之外。