齐次变换
齐次变换看,这里
2. Cesium矩阵变换
2.1 创建矩阵
- 创建一个矩阵的一些方法
let m3 = new Cesium.Matrix3(
1,0,0,
0,1,0,
0,0,1
)
let m3 = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(60));
let m4 = new Cesium.Matrix4(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
)
let translation = new Cesium.Cartesian3( 20, 15, 0 );
let m4 = Cesium.Matrix4.fromTranslation(translation);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(m3);
- 使对象模型绕某轴旋转一个角度
let anglex = 60
let m = tilesetModel.modelMatrix;
let rotationM = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(anglex));
let newMatrix4 = Cesium.Matrix4.multiplyByMatrix3(m, rotationM, new Cesium.Matrix4());
tilesetModel.modelMatrix = newMatrix4
2.2 本地坐标与世界坐标的转换
- 本地坐标转为世界坐标
let pos = Cesium.Cartesian3.fromDegrees(-114.0, 50.0, 50.0);
let _LocalToWorldMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(pos);
let _localPos = new Cesium.Cartesian3(0, 10, 20);
let _worldPointX = Cesium.Matrix4.multiplyByPoint(_LocalToWorldMatrix , _localPos, new Cesium.Cartesian3());
其它矩阵相关
- 两个4X4矩阵的叉乘
Cesium.Matrix4.multiply(mm, rotationZ, mm);
- 两个向量的相减
var oldCart = new Cesium.Cartesian3(0,0,0);
var newCart = new Cesium.Cartesian3( 20, 15, 0 );
var translation = Cesium.Cartesian3.subtract(oldCart, newCart, new Cesium.Cartesian3());
- 一个4X4矩阵与一个点(平移向量)的叉乘
Cesium.Matrix4.multiplyByPoint(matrix4 , pos );
- 一个4X4的旋转矩阵与3X3的矩阵的叉乘
Cesium.Matrix4.multiplyByMatrix3(m, rotationM)
var getRotation = Cesium.Matrix4.getRotation(multiply, new Cesium.Matrix3());
Cesium.Cartesian3.ZERO
Cesium.Cartesian3.UNIT_X
Cesium.Cartesian3.UNIT_Y
Cesium.Cartesian3.UNIT_Z