Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 创建具有不精确阈值的简化边界_Unity3d_Bounds_Aabb - Fatal编程技术网

Unity3d 创建具有不精确阈值的简化边界

Unity3d 创建具有不精确阈值的简化边界,unity3d,bounds,aabb,Unity3d,Bounds,Aabb,给定一组非旋转的AABB边界,我希望从原始集合中创建一组更简单的边界,允许指定数量的不精确性 一些例子: 我在Unity中使用它,但它只是基本的AABB比较材料,没有Unity特定的内容。我想一定有人在过去的某个时候为这个设计了一个系统,但我没有在周围搜索。封装边界很容易,但这很难,因为您不能一个接一个地遍历每个边界。有时候,一个更简单的解决方案只能从整体上看 快速性能并不重要,但会很好。两个方向的不准确度都可以(即边界可能比实际尺寸小一点或大一点)。如果有帮助的话,我可以期望原始集合中的所有

给定一组非旋转的AABB边界,我希望从原始集合中创建一组更简单的边界,允许指定数量的不精确性

一些例子:

我在Unity中使用它,但它只是基本的AABB比较材料,没有Unity特定的内容。我想一定有人在过去的某个时候为这个设计了一个系统,但我没有在周围搜索。封装边界很容易,但这很难,因为您不能一个接一个地遍历每个边界。有时候,一个更简单的解决方案只能从整体上看

快速性能并不重要,但会很好。两个方向的不准确度都可以(即边界可能比实际尺寸小一点或大一点)。如果有帮助的话,我可以期望原始集合中的所有边界都连接到某个地方——在单独的组中没有自由浮动的块


我不希望任何人编写一个完整的系统来解决这个问题,我更希望它已经被解决,或者可能有一个明显的过程来实现它,我还没有想到。

这听起来像是可以用表面积启发式(SAH)处理的东西。SAH通常用于光线跟踪,以在存储三角形时构建更好的树状结构。有多个来源对此进行了更多的讨论。第7.3章是一个很好的例子

SAH构建的基本思想是从整个空间开始,递归地划分它。通过扫描所有合理位置并计算两个子节点的表面积来确定分割位置。合理的位置是任何三角形都有其上限或下限的位置。在扫描所有候选对象后,使用子对象中总表面积最小的分区


如果SAH对你的申请不是一个好主意,你可以对所有候选人进行类似的扫描,但要计算AABBs内的额外空间。

谢谢,这听起来很有趣,至少给了我一些可以浏览的内容。