Cesium自定义GLB模型节点旋转时模型扭曲问题排查
问题分析与解决方案
核心模型问题
你的自定义模型旋转后出现扭曲,主要源于以下几点:
- 未烘焙缩放变换:在Blender中编辑模型时,节点的缩放操作未应用到网格顶点,导出GLB后节点矩阵携带缩放分量,与Cesium中旋转矩阵叠加时,非均匀缩放会直接导致模型扭曲。
- 轴心点未对齐旋转轴:顶部盒子或底部建筑的轴心点不在自身高度轴(Z轴)中心,旋转时绕偏移的轴心运动,视觉上呈现扭曲错位。
- 代码旋转轴与需求不匹配:需求是绕Z(高度)轴旋转,但代码中使用
Cesium.Matrix3.fromRotationY(绕Y轴旋转),若模型局部轴与Cesium轴对应关系不一致,会加剧问题。
验证与修复步骤
1. 应用模型变换(解决缩放导致的扭曲)
打开Blender中的自定义模型:
- 选中顶部盒子/底部建筑节点,按
N打开属性面板,查看「变换」栏的缩放值,若不是(1,1,1),说明存在未应用的缩放。 - 按
Ctrl+A选择「缩放」,将缩放烘焙到网格顶点。 - 对所有节点重复操作,确保缩放值均为
(1,1,1),重新导出GLB测试。
2. 调整轴心点到模型中心
- 选中顶部盒子节点,切换到编辑模式(Tab键),按
Shift+S选择「游标到选中项中心」。 - 切回对象模式,按
Shift+S选择「原点到游标」,将轴心点移至模型几何中心。 - 确认轴心局部轴与模型高度方向(Z轴)对齐。
3. 修正代码旋转轴逻辑
如果需求是绕Z(高度)轴旋转,将代码中的旋转矩阵改为:
const rotation = Cesium.Matrix3.fromRotationZ(angleRad);
(第三方模型正常可能是因为其局部Y轴恰好为高度方向,与你的自定义模型轴方向不一致)
补充说明
当建筑垂直面尺寸一致时,均匀缩放与旋转的叠加不会明显扭曲模型;但修改尺寸后变为非均匀缩放,缩放与旋转的复合计算就会触发扭曲——这和你观察到的现象完全吻合。
内容的提问来源于stack exchange,提问作者Sagi Mann
相关产品推荐
相关产品推荐

