模型包围盒看着对却选不中,怎样把本地八角变到世界坐标

2026-10-24

本地包围盒旋转到世界坐标后,不能只变换min和max两个角,再将结果当世界轴对齐包围盒。应变换八个角点,再逐轴取最小与最大。glTF accessor的min/max描述存储属性范围,不自动包含节点世界变换;拾取、镜头定位和标签范围需要知道自己拿到的是哪一层边界。

环境和证据范围

附件只计算静态长方体绕Z旋转后的世界AABB,不处理骨骼、变形目标、实例或动画中的动态几何。父变换需先组合为完整矩阵;本文使用单层旋转且不含透视投影。未加载真实模型,也未测任何引擎的拾取实现。

核对顺序

  1. 先确认输入边界属于accessor、网格、节点局部还是世界。不同引擎API可能返回不同空间,应查接口说明并记录调用点,不能用一个变量bbox在全链路里反复覆盖。

  2. 从本地min/max每轴各取两个端点,枚举2×2×2个角。用同一节点的完整世界变换处理每个角点,包含缩放、旋转和平移,不能只变换中心后原样保留尺寸。

  3. 对八个变换结果分别取X/Y/Z最小与最大,再检查所有角点都落在新AABB内。将结果与只变换两个对角的错误方法对照,让测试真正能识别遗漏极值。

  4. 边界变化后更新依赖的拾取代理、相机聚焦和标签布局。静态资产可以缓存,但父节点或动画变化时要有失效策略;不正确的旧缓存可能让可见模型与可选区域脱离。

可复算的输入与预期

本地范围x=[0,2]、y=[0,1]、z=[0,1],绕Z45度后世界min=[-0.707107,0,0]、max=[1.414214,2.12132,1]。只变两个对角会错误给x=[0,0.707107]。脚本枚举八角并检查覆盖关系,两个反例边界均写进输出便于比较。

下载与现场记录

下载本题合成输入与预期JSON、离线只读核验脚本和现场空白记录CSV。放在同一目录,用 Python 3 运行 python verify.py,逐项计算或解析后与预期比较,失败会显示差异。

现场字段包括 bounds_space、local_min、local_max、world_transform、world_min、world_max、dynamic_update_rule。合成样例保持原样,实测另存并填写型号、版本、证据路径,未采集处留空。本地核验不代表真实设备、代理、浏览器或长期稳定性已测。

失败分支与移交

八角变换得到的是原本地盒的世界AABB,可能比实际网格的最紧世界边界更宽,并不等于精确碰撞形状。对骨骼和变形模型,静态accessor边界也可能不再包含运行时几何;这时需要引擎支持的动态更新方法,不能只重复这段静态计算。

移交应注明边界空间、参与变换的节点链、更新触发条件与允许的宽松程度。真实场景里再把可视化边框叠到模型上并测试边缘拾取,保存引擎版本与截图。本文不把数学包围盒通过当成现场交互已验收。

基础背景可看孪生展项的交互设计:触控、手势与讲解器怎么配。八角计算依赖完整世界变换,变换次序可参考子模型偏移总差一段,怎样按 glTF 节点层级计算 TRS。更多资料在数字孪生技术方案。

需要项目联调时,可按上述字段整理资料,联系企服君核对实际接入范围。

一级资料

核对日期:2026-10-24。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。