znlgis 博客

GIS开发与技术分享 — GDAL · GeoServer · PostGIS · QGIS · OpenLayers · Cesium · FreeCAD · NPOI

第05章:变换、裁剪与多模型场景管理

清理之后,下一步往往是校正模型方向与比例裁剪边界,以及在一个场景里组合多个模型。本章对应源码 src/tools/(变换工具)、src/transform.tssrc/pivot.tssrc/scene.tssrc/ui/scene-panel.ts

1. 变换工具:移动、旋转、缩放

SuperSplat 提供三种标准变换工具,可用数字键快速切换:

工具 快捷键 源码
移动(Move) 1 tools/move-tool.ts
旋转(Rotate) 2 tools/rotate-tool.ts
缩放(Scale) 3 tools/scale-tool.ts

激活后视口中会出现 Gizmo(操纵手柄)

  • 移动:拖动箭头沿单轴平移,拖动平面手柄沿平面平移;
  • 旋转:拖动圆环绕对应轴旋转;
  • 缩放:拖动立方体手柄沿轴缩放,中心手柄等比缩放。

变换底层由 src/transform.ts(变换数据)、src/transform-handler.tssrc/transform-palette.ts(数值输入面板)实现,可在面板中直接输入精确的位移、角度、缩放数值,比纯拖动更精准。

2. 坐标空间:世界 vs 局部

变换可以在世界坐标系(world)局部坐标系(local)下进行,由 ToolManager 维护当前坐标空间(tool.coordSpace):

  • 切换:Shift + Ctool.toggleCoordSpace)或工具栏按钮;
  • 世界空间:手柄始终对齐全局坐标轴,适合“把模型摆正到地面”;
  • 局部空间:手柄对齐模型自身朝向,适合沿模型自身轴向微调。

3. 轴心(Pivot)

变换围绕一个轴心点(Pivot) 进行(src/pivot.ts)。轴心决定旋转与缩放的中心:

  • 默认轴心通常位于选区或模型的中心;
  • 调整轴心位置可实现“绕某个特定点旋转”,例如让模型绕其底部中心旋转以便摆正到网格地面上。

4. 变换“选区” vs 变换“整个模型”

SuperSplat 既能变换整个高斯模型(最常用,用于规范化方向、比例与位置),也能变换被选中的部分高斯点(用于局部修整,例如把歪掉的一部分掰正)。注意:

  • 变换整个模型属于实体级(Entity)变换,记录在模型的变换属性中;
  • 变换选中的点会改变这些高斯的位置/旋转/缩放数据本身(仍可撤销)。

5. 模型规范化实战:摆正、对齐、缩放到真实尺度

从训练管线导入的模型常见三类问题与对应处理:

  1. 上下颠倒 / 倾斜:用旋转工具(通常绕 X 轴 ±90° 或 180°)让“地面”水平。可先打开网格(G)作为水平参照;
  2. 偏离原点:用移动工具把模型主体移到世界原点附近、底面贴合网格;
  3. 比例不真实:用缩放工具按已知尺寸(如门高 2m)调整到真实世界尺度。包围盒尺寸叠加层(src/ui/bound-dimensions-overlay.ts)会实时显示模型的物理尺寸,便于对照。

规范化后的模型在导入到任意引擎时都能“开箱即用”,朝向、位置、比例一致。

6. 裁剪边界

清理与变换之外,裁剪用于只保留感兴趣的空间范围

  • 包围盒选择(第 04 章)框出要保留的区域,反选(Ctrl + I)后删除外部;
  • 或用包围盒框出要删除的区域直接删除;
  • 配合 View Cube 切到正视/俯视,可以非常精确地沿某个平面裁切(例如裁掉地面以下的部分)。

7. 多模型场景管理

SuperSplat 的场景(src/scene.ts)由若干 Element 组成,包括一个或多个高斯模型(Splat)、相机、网格、叠加层等。你可以在同一个场景中加载多个模型:

  • 场景面板 / 模型列表src/ui/scene-panel.tssplat-list.ts)列出所有已加载的模型,可:
    • 切换每个模型的可见性
    • 选中某个模型作为当前编辑目标(注意:选区编辑当前聚焦于被选中的那个模型);
    • 重命名、删除模型;
  • 独立变换:分别选中不同模型并变换,把它们摆放到合理的相对位置(例如把多个扫描拼接成一个大场景);
  • 新增/移除:继续拖入新文件即可添加模型(AddSplatOp);从列表移除会触发 scene.elementRemoved,相关历史操作会被清理。

合并模型

多个模型经过对齐后,可在导出时合并为一个文件(参见第 08 章导出设置),方便作为单一资产分发。

8. 场景配置

src/scene-config.ts 定义了场景的默认配置,包括背景颜色、相机初始参数、网格、色调映射(tonemapping)、包围盒显示等。这些大多可在视图设置面板(src/ui/view-panel.ts)中交互调整,用于:

  • 设置合适的背景色以便观察暗色/亮色模型;
  • 调整相机 FOV 与近远裁剪面;
  • 控制网格、叠加层的显示。

9. 实战流程:从原始扫描到规范资产

  1. 加载并清理模型(第 04 章);
  2. 打开网格 G,切到正视/侧视;
  3. 用旋转工具把地面摆平,用移动工具把底面贴合网格、主体居中;
  4. 参照包围盒尺寸叠加层,用缩放工具调整到真实尺度;
  5. 用包围盒裁剪掉多余边界;
  6. 如需组合,加载其余模型并逐一对齐;
  7. 进入下一阶段:调色(第 06 章)或直接导出(第 08 章)。

10. 本章小结

本章覆盖了 SuperSplat 的空间编辑能力:

  • 移动/旋转/缩放三种变换工具,配合 Gizmo 与数值面板精确操作;
  • 世界/局部坐标空间切换与轴心(Pivot)控制;
  • 既可变换整个模型,也可变换选中的高斯点;
  • 模型规范化(摆正、居中、缩放到真实尺度)与边界裁剪;
  • 多模型场景管理:模型列表、可见性、独立变换与合并。

下一章我们进入外观调整——颜色、对比度与球谐光照编辑。


← 上一章 目录 下一章 →