何时应找到附加到模型的边界框的最小值和最大值
When should I find the min and max for a BoundingBox attached to a Model
我正在努力为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 这样的库,我相信该库会处理边界框,但如果您将管道创建为学习机会,这可能不是一个选择。
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在数组中交换最小和最大的位置?
- 需要使用模板查找数组的第二个最小和最小值
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 为什么我不能使用最小和最大这两个词作为变量名称?
- 在运行时为随机分布类成员设置最小和最大边界?
- 如何使用气泡排序从最小到最大对 4 个数组进行排序? C++
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- 类型 *阵列的最小或最大值的类功能 *
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- 想要以正弦曲线的形式在循环中连续将值从最小变为最大
- 数组内存地址总是按最小到最大的顺序排列吗
- 使用向量而不是数组从最小到最大对数字进行排序C++
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 在用户定义结构的向量中查找最小和最大元素的索引
- 二进制搜索,用于查找排序数组中比给定值最小和最大的元素
- c++中的函数如何以最小的复制返回值或引用?
- 我如何确定我可以传递给编译器选项的最小和最大值
- 如何为每个光栅带设置最小和最大颜色值(使用GDAL)
- 在c++中最小化分支-如果值是非零则递增