模型包围盒看着对却选不中,怎样把本地八角变到世界坐标
本地包围盒旋转到世界坐标后,不能只变换min和max两个角,再将结果当世界轴对齐包围盒。应变换八个角点,再逐轴取最小与最大。glTF accessor的min/max描述存储属性范围,不自动包含节点世界变换;拾取、镜头定位和标签范围需要知道自己拿到的是哪一层边界。
环境和证据范围
附件只计算静态长方体绕Z旋转后的世界AABB,不处理骨骼、变形目标、实例或动画中的动态几何。父变换需先组合为完整矩阵;本文使用单层旋转且不含透视投影。未加载真实模型,也未测任何引擎的拾取实现。
核对顺序
-
先确认输入边界属于accessor、网格、节点局部还是世界。不同引擎API可能返回不同空间,应查接口说明并记录调用点,不能用一个变量bbox在全链路里反复覆盖。
-
从本地min/max每轴各取两个端点,枚举2×2×2个角。用同一节点的完整世界变换处理每个角点,包含缩放、旋转和平移,不能只变换中心后原样保留尺寸。
-
对八个变换结果分别取X/Y/Z最小与最大,再检查所有角点都落在新AABB内。将结果与只变换两个对角的错误方法对照,让测试真正能识别遗漏极值。
-
边界变化后更新依赖的拾取代理、相机聚焦和标签布局。静态资产可以缓存,但父节点或动画变化时要有失效策略;不正确的旧缓存可能让可见模型与可选区域脱离。
可复算的输入与预期
本地范围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。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。