Cesium当中有好几种坐标系,有如下几种
模型坐标系 – 世界坐标系 – 观察坐标系(又称相机坐标系、视图坐标系) – 裁剪坐标系 – NDC 坐标系 – 屏幕坐标系
世界坐标转观察坐标
var posEC = Cesium.Matrix4.multiplyByVector(viewer.camera.viewMatrix, new Cesium.Cartesian4(-2767407.0307144176,4768471.034625285,3196100.31687976,1), new Cesium.Cartesian4());
观察坐标转裁剪坐标
var posTailor = Cesium.Matrix4.multiplyByVector(viewer.camera.frustum.projectionMatrix, posEC, new Cesium.Cartesian4());
观察坐标转NDC坐标(透视除法),xyz分量分别除以w分量
var posNDC = Cesium.Cartesian4.divideByScalar(posTailor, posTailor.w, new Cesium.Cartesian4());
NDC坐标转屏幕坐标
var viewportMatrix = Cesium.Matrix4.computeViewportTransformation({
x : 0.0,
y : 0.0,
width : 1920.0,
height : 902.0
}, 0.0, 1.0, new Cesium.Matrix4());
var posEnd = Cesium.Matrix4.multiplyByVector(viewportMatrix , posNDC , new Cesium.Cartesian4());