cesium1.132的setColumn方法也没有了
时间: 2025-09-08 16:04:30 AIGC 浏览: 18
在 **Cesium 1.132** 中,`Matrix4.setColumn()` 方法确实已经被**移除**,这是 Cesium 从 **1.99 版本之后**开始逐步推行的 API 变化,目的是提高类型安全性和性能,鼓励使用更函数式的操作方式。
---
## ✅ 问题分析
### ❌ 错误写法(已不支持):
```js
rotation.setColumn(0, new Cesium.Cartesian4(rotateX.getColumn(0), 0));
```
这是因为:
- `setColumn` 方法已被移除
- `Matrix4` 现在是 **immutable(不可变)对象**,所有修改操作都会返回新的矩阵
---
## ✅ 正确做法:使用 `Cesium.Matrix4.setRow()` 或 `Cesium.Matrix4.fromRotationTranslation()` 等方法
---
## ✅ 示例:在 Cesium 1.132 中构建一个旋转+平移的 ModelMatrix
### ✅ 完整代码如下:
```js
// 1. 创建目标位置(经纬度 + 高度)
const position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 0);
// 2. 创建局部坐标系(East-North-Up)
const enuToFixed = Cesium.Matrix4.fromRotationTranslation({
rotation: Cesium.Matrix3.fromHeadingPitchRoll(new Cesium.HeadingPitchRoll(0, 0, 0)),
translation: position
});
// 3. 创建绕 X 轴旋转 -90° 的旋转矩阵(修正模型姿态)
const rotateX = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(-90));
// 4. 合并旋转和平移,构建最终的 modelMatrix
const rotationTranslation = Cesium.Matrix4.fromRotationTranslation({
rotation: rotateX,
translation: new Cesium.Cartesian3(0, 0, 0) // 如果需要偏移,可以设置
});
// 5. 将旋转矩阵与局部坐标系结合
const finalModelMatrix = Cesium.Matrix4.multiply(enuToFixed, rotationTranslation, new Cesium.Matrix4());
// 6. 创建倾斜摄影模型并应用 modelMatrix
const tileset = new Cesium.Cesium3DTileset({
url: 'path/to/tileset.json',
modelMatrix: finalModelMatrix
});
viewer.scene.primitives.add(tileset);
// 7. 飞到模型位置
viewer.camera.flyTo({
destination: Cesium.Rectangle.fromDegrees(-115.0, 20.0, -110.0, 30.0)
});
```
---
## ✅ 替代 setColumn 的方法
### ✅ 方法一:使用 `Cesium.Matrix4.fromRotationTranslation()`
这是最推荐的方式,用于构建包含旋转和平移的变换矩阵。
```js
const matrix = Cesium.Matrix4.fromRotationTranslation({
rotation: rotationMatrix3,
translation: translationVector
});
```
### ✅ 方法二:使用 `Cesium.Matrix4.fromMatrix3()` + 平移
如果你已经有了一个 `Matrix3` 旋转矩阵:
```js
const matrix3 = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(-90));
const matrix4 = Cesium.Matrix4.fromMatrix3(matrix3);
```
### ✅ 方法三:手动构造矩阵数组(不推荐,但可用于调试)
```js
const elements = [
r00, r01, r02, 0,
r10, r11, r12, 0,
r20, r21, r22, 0,
tx, ty, tz, 1
];
const matrix = Cesium.Matrix4.fromArray(elements);
```
---
## ✅ 小结:Cesium 1.132 中 `setColumn` 已废弃,推荐使用
| 旧方法 | 新方法 | 说明 |
|--------|--------|------|
| `new Cesium.Matrix4(matrix)` | `Cesium.Matrix4.clone(matrix)` | 构造方式变化 |
| `setColumn()` | `fromRotationTranslation()` | 矩阵构造方式变化 |
| `setRow()` | `fromRotationTranslation()` | 现在统一用构造函数 |
| `multiplyTo()` | `Cesium.Matrix4.multiply(a, b, result)` | 推荐使用函数式 API |
---
###
阅读全文
相关推荐




















