cesium1.132中不能构建new Cesium.Matrix(modelmatrix)
时间: 2025-09-08 21:04:31 AIGC 浏览: 19
在 Cesium **1.132** 中,你提到不能使用 `new Cesium.Matrix4(modelMatrix)` 来复制一个 `Matrix4` 实例,这是因为 Cesium 从某个版本开始对 `Matrix4` 的构造函数进行了限制,**不再允许直接使用 `new Matrix4(matrix)` 的方式复制矩阵**。
---
## ✅ 问题分析
### ❌ 错误写法(Cesium 1.132 中不支持):
```js
const copy = new Cesium.Matrix4(original); // ❌ 报错:Constructor requires 16 arguments
```
这是因为在 Cesium 1.132 中,`Matrix4` 的构造函数不再接受另一个 `Matrix4` 实例作为参数,而是要求你传入 16 个数字(即 4x4 矩阵的每个元素)。
---
## ✅ 正确写法:使用 `Cesium.Matrix4.clone()` 或 `Cesium.Matrix4.fromArray()` 复制矩阵
### ✅ 方法一:使用 `Cesium.Matrix4.clone()`
```js
const copy = Cesium.Matrix4.clone(originalMatrix);
```
- ✅ 推荐方式
- ✅ 安全、简洁、兼容性好
---
### ✅ 方法二:手动复制数组
如果你需要更精细控制:
```js
const elements = originalMatrix.toArray(); // 获取矩阵元素数组
const copy = Cesium.Matrix4.fromArray(elements);
```
---
## ✅ 示例:在 Cesium 1.132 中正确应用旋转和平移
```js
// 创建一个与地面平行的坐标系
const position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 0);
let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
// 克隆 modelMatrix
let rotation = Cesium.Matrix4.clone(modelMatrix);
// 创建绕 X 轴旋转 -90° 的旋转矩阵
const rotateX = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(-90));
// 替换旋转部分(保留平移部分)
rotation.setColumn(0, new Cesium.Cartesian4(rotateX[0], rotateX[1], rotateX[2], 0));
rotation.setColumn(1, new Cesium.Cartesian4(rotateX[3], rotateX[4], rotateX[5], 0));
rotation.setColumn(2, new Cesium.Cartesian4(rotateX[6], rotateX[7], rotateX[8], 0));
// 创建平移矩阵
const translation = new Cesium.Cartesian3(0, 0, 10); // Z 轴抬高 10 米
const translateMatrix = Cesium.Matrix4.fromTranslation(translation);
// 合并旋转和平移
const finalMatrix = Cesium.Matrix4.multiply(rotation, translateMatrix, new Cesium.Matrix4());
// 设置到 tileset
const tileset = new Cesium.Cesium3DTileset({
url: 'path/to/tileset.json',
modelMatrix: finalMatrix
});
viewer.scene.primitives.add(tileset);
```
---
## ✅ 小结:Cesium 1.132 中 Matrix4 构造方式变化
| 写法 | 是否支持 | 建议 |
|------|----------|------|
| `new Cesium.Matrix4()` | ✅ 支持(默认单位矩阵) |
| `new Cesium.Matrix4(16个参数)` | ✅ 支持(构造新矩阵) |
| `new Cesium.Matrix4(matrix)` | ❌ 不支持(1.132 中已弃用) |
| `Cesium.Matrix4.clone(matrix)` | ✅ 推荐 |
| `Cesium.Matrix4.fromArray(array)` | ✅ 推荐 |
---
###
阅读全文
相关推荐


















