Cesium中的场景变换是指将3D世界中的点从一个坐标系转换到另一个坐标系。这种转换是通过场景变换对象执行的,该对象包含一系列静态方法,用于实施不同类型的场景变换,例如将笛卡尔坐标转换为canvas的笛卡尔坐标或屏幕的笛卡尔坐标。
在Cesium中,场景变换分别涉及以下3种坐标系:笛卡尔坐标系、canvas的笛卡尔坐标系和屏幕的笛卡尔坐标系。
场景变换中的笛卡尔坐标转换是指将一个点从一个笛卡尔坐标系转换为另一个笛卡尔坐标系。这通常用于将一个点从地球坐标系(笛卡尔坐标系)转换为相机坐标系(笛卡尔坐标系),或者将一个点从世界坐标系(笛卡尔坐标系)转换为屏幕坐标系(笛卡尔坐标系)。
要执行笛卡尔坐标系到相机坐标系的转换,可以使用如下代码:
var positionInCartesian = Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 0);
var cameraPositionInCartesian = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, positionInCartesian);
要执行笛卡尔坐标系到屏幕坐标系的转换,可以使用如下代码:
var positionInCartesian = Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 0);
var screenPositionInCartesian = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, positionInCartesian);
场景变换中的canvas的笛卡尔坐标转换是指将一个点从笛卡尔坐标系(世界坐标系)转换为canvas的笛卡尔坐标系。这是一个二维坐标系,它与canvas的大小和位置有关。
要执行笛卡尔坐标系到canvas的笛卡尔坐标系的转换,可以使用如下代码:
var positionInCartesian = Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 0);
var canvasPositionInCartesian = Cesium.SceneTransforms.wgs84ToCanvasCoordinates(viewer.scene.canvas, positionInCartesian);
场景变换中的屏幕的笛卡尔坐标转换是指将一个点从笛卡尔坐标系(世界坐标系)转换为屏幕坐标系。这是一个二维坐标系,它与屏幕的大小和分辨率有关。
要执行笛卡尔坐标系到屏幕的笛卡尔坐标系的转换,可以使用如下代码:
var positionInCartesian = Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 0);
var screenPositionInCartesian = Cesium.SceneTransforms.wgs84ToScreenCoordinates(viewer.scene, positionInCartesian);
使用Cesium中的场景变换对象能够很方便地将3D世界中的点从一个坐标系转换到另一个坐标系,例如将笛卡尔坐标转换为canvas坐标或屏幕坐标。它非常有用,特别是当要渲染自定义图形、标签或工具提示等信息时。