Skip to content

Latest commit

 

History

History
32 lines (32 loc) · 3.5 KB

File metadata and controls

32 lines (32 loc) · 3.5 KB

问题报告:图片填充器在 YZ/XZ 平面“尺寸不一致/无法撑满” 结论摘要 在 XY 平面表现正常;问题集中在 YZ/XZ 平面的“把 Image 旋转+缩放到目标面再 explode”的矩阵变换阶段,导致新几何与原面不等尺或未撑满。 复现步骤

  1. 在模型中选取严格的矩形面,法向分别为 ±X(YZ 面)或 ±Y(XZ 面)。
  2. 执行“应用到已选平面”。
  3. 观察:新生成几何与原面不重合,或未撑满,或尺寸偏差;日志显示目标宽高正确,但 explode 后包围盒不匹配。 期望行为 无论 XY/YZ/XZ,生成的新面与原面完全等尺、共面、对齐,且整张图片被拉伸铺满,没有平铺与裁剪。 现状与证据 XY 模式:已用“直接 add_image(BL, width, height)”验证为正确(已多次通过)。 YZ/XZ 模式:采用 T = Translation(BL) × Rotation(±90°) × Scaling(ORIGIN, width, height) 仍出现不对齐/未撑满。 日志显示:目标 width/height 与从顶点计算的一致,但 explode 后包围盒尺寸不匹配(dx/dy/dz 偏差)。 根因分析(按可能性从高到低) 锚点角点失配:对 YZ/XZ 面使用“负缩放”翻转以适配 U/V 方向,导致图片局部“左下角”经过旋转/翻转后不再对应几何 BL,需要额外偏移修正;目前仅做了平移(BL),未补偿翻转引入的角点漂移。 变换顺序与枢轴选择仍有偏差:S(ORIGIN) 后 R(ORIGIN) 再 T(BL) 的组合在符号翻转情况下会改变锚点;应改为“先建立以 BL 为原点的目标局部坐标系,再在 BL 枢轴上做等比缩放”,避免任何翻转造成的偏移。 U/V 方向符号推断与四角定义不一致:矩形四角通过 UV 极值识别得到的 BL/BR/TL 与我们在 YZ/XZ 里用世界轴判断的 sign_x/sign_y/sign_z 存在不一致,导致轴向或角点取反。 测量口径误差:目前 explode 后的尺寸用“世界轴包围盒”近似统计,若目标面有轻微旋转/倾斜,会出现表观偏差(不过视觉未重合仍成立)。 影响范围 仅影响“应用到已选面”的 YZ/XZ 平面;新建 XY 面与 XY 应用已确认正常。不会破坏模型其它实体,但会生成错误尺寸的面。 修复方案(两条可行路径) 方案 A(保持 Image→explode):严格角点锚定、无负缩放
  4. 用四角点确定目标局部坐标系 Uaxis/Vaxis(方向用点积与叉积保证一致,与 BL/BR/TL 定义对齐)。
  5. 变换改为:axes = Transformation.axes(BL, Uaxis, Vaxis, Naxis);scaleBL = Transformation.scaling(BL, width, height, 1);T = axes * scaleBL。
  6. 不再使用负缩放翻转,轴向改用“带符号的单位轴”(把符号并入 Uaxis/Vaxis),确保 BL 为缩放枢轴且为最终左下角。 方案 B(更稳妥,建议优先):直接以四角点重建面,再定位材质 删除旧面 → ents.add_face([BL, BR, TR, TL]) → face.position_material(material, [BL, BR, TL], true);无需 Image/ explode,100% 等尺对齐且没有剪切风险。 建议的下一步 我先实现方案 B(最稳、改动小,立即解决),并保留当前 Image 路径为注释备用;随后补充方案 A 的角点锚定版(axesscaling(BL)),方便你在需要“生成 Image 实体”的场景切换。 同时把 explode 后的“新面集合差”精确测量加入日志,杜绝误读。 备注 本轮排查已确认:XY 面问题来自 up 投影退化(已修复);当前问题完全归因于 YZ/XZ 的变换锚点/方向处理,而非宽高计算或容器坐标系。