何时应找到附加到模型的边界框的最小值和最大值

When should I find the min and max for a BoundingBox attached to a Model

本文关键字:最小值 最大值 边界 模型 何时应      更新时间:2023-10-16

我正在努力为DirectX 11/12管道中的任何3D模型实现ModelClass。

我的具体问题在于计算我希望用作模型类成员的边界框结构的最小值和最大值。

我有两种计算方法。

方法1.从文件中读取每个顶点时,存储当前 minx,y,z 和 maxx,y,z,并在加载每个顶点时对照当前最小/最大 x,y,z 检查每个顶点。

方法2.加载完所有顶点后,按 x、y 和 z 对它们进行排序,找到每个点的最低值和最高值。

您会推荐哪种方法,为什么?

方法 1

时间复杂度为 O(n(,内存复杂度为 O(1(。

它易于实现。

方法2

时间复杂度为 O(nLogn( 内存复杂度可能至少是线性的(如果您创建数组的副本或使用合并排序(或 O(1( 如果您使用像快速排序这样的就地排序算法。

这必须为每个维度完成 3 次。

总而言之,方法 1 在我能想到的所有场景中都是最好的。

排序通常不是一项便宜的操作,尤其是当您的模型越来越大时。因此,对我来说,方法1更有效,但如果不确定,我建议测量它,看看哪一个需要更长的时间。

如果您使用的是像 Asspimp 这样的库,我相信该库会处理边界框,但如果您将管道创建为学习机会,这可能不是一个选择。