在 Unity 中,假设你有一个 3D 对象,
当然,获得 AABB 很简单,Unity 有直接的函数,
(您可能必须以通常的方式“添加渲染器的所有边界框”,没有问题。)
因此,Unity 确实有一个直接功能,可以在每一帧的内部网格/渲染管道之外立即为您提供 3D AABB 框。
现在,对于所讨论的相机,按照定位,AABB 确实覆盖了某个 2D 边界框......
事实上...是否有某种内置的直接方法可以在 Unity 中找到橙色 2D 框?
问题 - Unity 是否有一个函数可以立即从管道中给出 2D 平截头体盒?
(请注意,要手动执行此操作,您只需为 AABB 的 8 个点制作光线(或使用世界来屏幕空间,如 Draco 提到的,相同);将它们封装在 2D 中以制作橙色框。)
我不需要手动解决方案,我问引擎是否每帧都以某种方式从管道中提供此解决方案?
有电话吗?
(确实,如果有这个就更好了……)
我的感觉是其中一个或全部
肯定会知道橙色框,甚至可能知道图形卡上管道内的蓝色框,就像它知道给定网格的 AABB 一样。
我们知道 Unity 可以让您在给定网格的每一帧立即点击 AABB 3D 框:事实上,Unity 是否给出了如此处所示的“2D 平截头体边界”?
据我所知,没有built in为了这。
然而,自己找到极端确实很容易。获取网格物体的边界框(屏幕截图中显示的长方体)就是这样做的,您只需在变换后的空间中进行即可。
- 循环遍历网格的所有顶点,执行以下操作:
-
转换 https://docs.unity3d.com/ScriptReference/Transform.TransformPoint.html从本地空间到世界空间的点(这处理缩放和旋转)
-
转换 https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html从世界空间到屏幕空间的点
- 确定新点的 X 和 Y 是否高于/低于存储的最小/最大值,如果是,则用新值更新存储的最小/最大值
- 循环完所有顶点后,您将得到 4 个值:min-X、min-Y、max-X 和 max-Y。现在您可以构建边界矩形
您可能还希望首先执行礼品包装 https://stackoverflow.com/questions/18416861/how-to-find-convex-hull-in-a-3-dimensional-space首先对模型进行分析,并且仅处理生成的凸包(因为不属于凸包的任何点都不会位于凸包的边界之外)。如果您打算在模型在屏幕上移动、缩放或旋转时绘制此屏幕空间矩形,并且必须重新计算边界框,那么您将需要执行此操作并缓存结果。
请注意,这确实not如果模型有效animates(例如,如果您的人形机器人站起来并进行开合跳)。求解动画情况要困难得多,因为您必须将每个动画的每一帧视为原始网格体的一部分,以便进行凸包求解(以确保您的动画不会移动网格体的一部分)在凸包之外),通过幂增加复杂性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)