我正在为DirectX 11/12管道中的任何3D模型实现ModelClass。
我的具体问题在于计算我希望用作ModelClass成员的BoundingBox结构的最小值和最大值。
我有两种方法来计算它们。
方法1.当从文件中读取每个顶点时,存储当前的minx,y,z和maxx,y,z,并检查每个顶点在加载时是否与当前的min / max x,y,z相对应。
方法2.在加载所有顶点之后,按x,然后y,然后z对它们进行排序,找到每个点的最低值和最高值。
您会推荐哪种方法?为什么?
时间复杂度为O(n),存储器复杂度为O(1)。
它很容易实现。
时间复杂度是O(nLogn)内存复杂性可能至少是线性的(如果你制作数组的副本或者如果你使用合并排序)或O(1)如果你使用像quicksort这样的就地排序算法。
每个维度必须完成3次。
总而言之,方法1在我能想到的所有场景中都是最好的。
排序通常不是一个便宜的操作,特别是当你的模型变得越来越大。因此,对我来说,方法1更有效,但如果不确定我建议测量它看哪一个需要更长时间。
如果您使用的是像Asspimp这样的库,我相信图书馆会处理边界框,但如果您将管道创建为学习机会,则可能无法选择。