Transforms是Cesium中的一个模块,它提供了3D空间中的转换功能,包括平移,旋转和缩放。
Transforms定义了以下一些通用的函数方法,可以用来执行如下3D到3D变换操作:
这些变换无需与任何特定的坐标系或数据结构相关联。对于每个变换来说,对应的控制点的坐标将会被变换。
下面是一个简单的例子,展示了如何使用Transforms模块对一个Cartesian3
对象执行平移变换:
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var translation = new Cesium.Cartesian3(1000.0, 0.0, 0.0);
var translated = Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(position), translation, new Cesium.Matrix4());
var position2 = Cesium.Matrix4.multiplyByPoint(translated, new Cesium.Cartesian3(0.0, 0.0, 0.0), new Cesium.Cartesian3());
console.log(position2); // Cartesian3 {x: -74.6281, y: 40.0280, z: 1000.0}
下面是Transforms模块提供的一些通用方法:
根据提供的Cartesian3
对象返回一个固定坐标系的常数矩阵。
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var fixedFrame = Cesium.Transforms.eastNorthUpToFixedFrame(position);
根据提供的heading, pitch, roll
值(弧度单位)以及一个原点Cartesian3
对象,计算并返回一个沿着x, y, z轴旋转后的四元数。
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var quat = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(0.0, 0.0, Cesium.Math.toRadians(45.0)));
根据提供的heading, pitch, roll
值(弧度单位)以及一个原点Cartesian3
对象,计算出一个HeadingPitchRoll
对应的固定帧矩阵。
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var fixedFrame = Cesium.Transforms.headingPitchRollToFixedFrame(position, new Cesium.HeadingPitchRoll(0.0, 0.0, Cesium.Math.toRadians(45.0)));
根据提供的Cartesian3
对象返回东-北-下的固定坐标系矩阵。
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var fixedFrame = Cesium.Transforms.northEastDownToFixedFrame(position);
将提供的世界坐标系(Cartesian3
)对象转换为窗口坐标系对象(Cartesian2
)。
var position = Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 1000.0);
var windowCoords = Cesium.Transforms.pointToWindowCoordinates(position, viewer.scene.canvas.clientWidth, viewer.scene.canvas.clientHeight);
根据提供的Rectangle
对象,返回一个固定坐标系矩阵。
var rectangle = Cesium.Rectangle.fromDegrees(-74.10, 40.68, -73.91, 40.80);
var fixedFrame = Cesium.Transforms.westEastSouthNorthToFixedFrame(rectangle);