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个球体,它们都在同一个地方。 谢谢你的提示。
答案 0 :(得分:0)
首先,你的二传手是空的。如果您要使用自动生成的设置器,请使用set;
代替set{}
。所以你在buildBoundingSphere()
中所做的一切都会丢失。首先验证。
另一个小问题是你的边界球体累加器是从原点开始的。这假设原点将在最终球体内,这通常不是真的。实际上,只要你知道第一个球体,你就应该以某种方式生成起始球体。
我无法从这个片段中说出更多内容。如果您要改变吸气剂中的所有球体,是否通过物体的当前变换?比例和位置似乎不依赖于它改变球体的网格,因此worldTransform矩阵的构造可以移动到循环之外。