Итак, я нашел эти методы/функции для создания BoundingBox для моей уменьшенной модели, и, видимо, мне пришлось бы масштабировать BoundingBox до того же масштаба. Я не очень хорошо знаком с использованием вершин, но я знаю, как масштабироваться с использованием матриц. Как я мог масштабировать BoundingBox в этом случае? Некоторое время я искал в Интернете, и мне еще предстоит найти решение.C# XNA шкала BoundingBox?
public Vector3[] GetVertexElement(ModelMeshPart meshPart, VertexElementUsage usage)
{
VertexDeclaration vd = meshPart.VertexBuffer.VertexDeclaration;
VertexElement[] elements = vd.GetVertexElements();
Func<VertexElement, bool> elementPredicate = ve => ve.VertexElementUsage == usage && ve.VertexElementFormat == VertexElementFormat.Vector3;
if (!elements.Any(elementPredicate))
return null;
VertexElement element = elements.First(elementPredicate);
Vector3[] vertexData = new Vector3[meshPart.NumVertices];
meshPart.VertexBuffer.GetData((meshPart.VertexOffset * vd.VertexStride) + element.Offset, vertexData, 0, vertexData.Length, vd.VertexStride);
return vertexData;
}
public BoundingBox? GetBoundingBox(ModelMeshPart meshPart, Matrix transform)
{
if (meshPart.VertexBuffer == null)
return null;
Vector3[] positions = GetVertexElement(meshPart, VertexElementUsage.Position);
if (positions == null)
return null;
Vector3[] transformedPositions = new Vector3[positions.Length];
Vector3.Transform(positions, ref transform, transformedPositions);
return BoundingBox.CreateFromPoints(transformedPositions);
}
public BoundingBox CreateBoundingBox(Model model)
{
Matrix[] boneTransforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(boneTransforms);
BoundingBox result = new BoundingBox();
foreach (ModelMesh mesh in model.Meshes)
{
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{
BoundingBox? meshPartBoundingBox = GetBoundingBox(meshPart, boneTransforms[mesh.ParentBone.Index]);
if (meshPartBoundingBox != null)
result = BoundingBox.CreateMerged(result, meshPartBoundingBox.Value);
}
}
return result;
}