我应该何时找到附加到模型的BoundingBox的最小值和最大值

问题描述 投票:1回答:2

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

我的具体问题在于计算我希望用作ModelClass成员的BoundingBox结构的最小值和最大值。

我有两种方法来计算它们。

方法1.当从文件中读取每个顶点时,存储当前的minx,y,z和maxx,y,z,并检查每个顶点在加载时是否与当前的min / max x,y,z相对应。

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

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

c++ performance graphics directx
2个回答
0
投票

Approach 1

时间复杂度为O(n),存储器复杂度为O(1)。

它很容易实现。

Approach 2

时间复杂度是O(nLogn)内存复杂性可能至少是线性的(如果你制作数组的副本或者如果你使用合并排序)或O(1)如果你使用像quicksort这样的就地排序算法。

每个维度必须完成3次。

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


0
投票

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

如果您使用的是像Asspimp这样的库,我相信图书馆会处理边界框,但如果您将管道创建为学习机会,则可能无法选择。

© www.soinside.com 2019 - 2024. All rights reserved.