unity3d - 立即从 3D 管道访问 2D 框的 Unity 功能?
问题描述
在 Unity 中,假设您有一个 3D 对象,
当然,获得 AABB 是微不足道的,Unity 有直接的功能,
(您可能必须以通常的方式“添加渲染器的所有边界框”,没问题。)
所以 Unity 确实有一个直接的功能,可以立即为您提供 3D AABB 盒子,而不是每帧的内部网格/渲染管道。
现在,对于有问题的相机,按照定位,AABB 确实覆盖了某个 2D 边界框......
事实上......是否有某种内置的直接方法可以在 Unity 中找到橙色的 2D 框?
问题 - Unity 是否具有立即从管道中提供 2D 截锥体的功能?
(请注意,要手动执行此操作,您只需为 AABB 的 8 个点制作光线(或使用世界到屏幕空间,就像 Draco 提到的那样);将它们封装在 2D 中以制作橙色框。)
我不需要手动解决方案,我在问引擎是否每帧都从管道中以某种方式给出这个?
有电话吗?
(确实,如果有这个会更好......)
我的感觉是其中一个或所有
- 特别是遮挡系统
- 着色器
- 渲染器
肯定会知道橙色框,甚至可能知道管道内的蓝色框,就在显卡旁边,就像它知道给定网格的 AABB 一样。
我们知道 Unity 可以让您在给定网格的每一帧立即点击 AABB 3D 框:事实上,Unity 是否给出了“2D 截锥体边界”,如此处所示?
解决方案
据我所知,没有内置的。
但是,自己找到极端确实非常容易。获取网格的边界框(屏幕截图中显示的长方体)就是这样做的方式,您只是在变换的空间中进行。
- 遍历网格的所有顶点,执行以下操作:
- 将点从本地空间转换到世界空间(这处理缩放和旋转)
- 将点从世界空间转换为屏幕空间
- 确定新点的 X 和 Y 是否高于/低于存储的 min/max 值,如果是,则使用新值更新存储的 min/max
- 遍历所有顶点后,您将获得 4 个值:min-X、min-Y、max-X 和 max-Y。现在你可以构建你的边界矩形
您可能还希望首先执行模型的礼品包装,并且只处理生成的凸包(因为不属于凸包的任何点都不会超出凸包的边界)。如果您打算在模型在屏幕上移动、缩放或旋转时绘制此屏幕空间矩形,并且必须重新计算边界框,那么您需要执行此操作并缓存结果。
请注意,如果模型具有动画效果(例如,如果您的类人机器人站起来并跳起千斤顶),这将不起作用。解决动画案例要困难得多,因为您必须将每个动画的每一帧都视为原始网格的一部分,以便进行凸包求解(以确保您的任何动画都不会移动网格的一部分在凸包之外),以幂增加复杂性。
推荐阅读
- python - 如何旋转等高线图的标签?
- xamarin.android - 发送带有附件正文的邮件
- arrays - 如何找到数组中最大的回文子序列?
- reactjs - React.js:尽管 http 响应为 400,但仍收到错误消息
- amazon-web-services - docker 不创建文件
- kubernetes - 如何从命令行传递 imagePullSecrets
- concurrency - 移动可变引用向量的 Rust 生命周期问题
- leaflet - layerGroup 的传单更改图标
- ruby - Ruby 检查上的“ArgumentError:参数数量错误”(相同的代码行,仅适用于某些值)
- excel - 搜索特定值并复制行以从整个工作簿粘贴到新工作表中