我什么时候应该找到附加到模型的 BoundingBox 的最小值和最大值
When should I find the min and max for a BoundingBox attached to a Model
我正在为我的 DirectX 11/12 管道中的任何 3D 模型实现 ModelClass。
我的具体问题在于计算我希望用作 ModelClass 成员的 BoundingBox 结构的最小值和最大值。
我有两种计算方法。
方法一
当从文件中读取每个顶点时,存储当前的 minx,y,z 和 maxx,y,z 并根据当前的 min/max x,y,z.[=10= 检查每个顶点加载时的情况]
方法二
加载完所有顶点后,按 x、y、z 排序,找到每个点的最低值和最高值。
您会推荐哪种方法,为什么?
排序通常不是一项成本低的操作,尤其是当您的模型越来越大时。因此,对我来说,方法 1 更有效,但如果不确定,我建议对其进行测量,看看哪个需要更长的时间。
如果您使用的是像 Asspimp 这样的库,我相信该库会处理边界框,但如果您创建管道作为学习机会,这可能不是一个选项。
方法一
时间复杂度为 O(n),内存复杂度为 O(1)。
实现起来很简单。
方法二
时间复杂度为 O(nLogn) 内存复杂度可能至少是线性的(如果您复制数组或使用合并排序)或 O(1) 如果您使用像快速排序这样的就地排序算法.
每个维度都必须执行 3 次。
总而言之,方法 1 在我能想到的所有场景中都是最好的。
我正在为我的 DirectX 11/12 管道中的任何 3D 模型实现 ModelClass。
我的具体问题在于计算我希望用作 ModelClass 成员的 BoundingBox 结构的最小值和最大值。
我有两种计算方法。
方法一 当从文件中读取每个顶点时,存储当前的 minx,y,z 和 maxx,y,z 并根据当前的 min/max x,y,z.[=10= 检查每个顶点加载时的情况]
方法二 加载完所有顶点后,按 x、y、z 排序,找到每个点的最低值和最高值。
您会推荐哪种方法,为什么?
排序通常不是一项成本低的操作,尤其是当您的模型越来越大时。因此,对我来说,方法 1 更有效,但如果不确定,我建议对其进行测量,看看哪个需要更长的时间。
如果您使用的是像 Asspimp 这样的库,我相信该库会处理边界框,但如果您创建管道作为学习机会,这可能不是一个选项。
方法一
时间复杂度为 O(n),内存复杂度为 O(1)。
实现起来很简单。
方法二
时间复杂度为 O(nLogn) 内存复杂度可能至少是线性的(如果您复制数组或使用合并排序)或 O(1) 如果您使用像快速排序这样的就地排序算法.
每个维度都必须执行 3 次。
总而言之,方法 1 在我能想到的所有场景中都是最好的。