Cesium2D视图下模型显示高度限制问题

文章讲述了在Cesium中使用卫星建模时,当卫星高度超过1000km,模型会消失并显示问题。作者发现是由于相机在从3D到2D转换时,固定的高度限制导致的。解决方法是初始化后手动设置相机Z值,如将相机高度设为地球半径的两倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Cesium建模卫星时,当卫星高度高于某km时,切换二维地图,卫星模型消失,卫星label还存在,如果关联了传感器的话,看起来好像是反着深入底图里面,显示效果很差。

模型展示(高度:1000km)

 模型展示(高度:1400km)

此时,模型已经在二维地图上不显示了,去找了下源码:

/cesium/Source/Scene/SceneTransitioner.js

SceneTransitioner.prototype.morphTo2D = function (duration, ellipsoid) {
  ...

  if (this._previousMode === SceneMode.COLUMBUS_VIEW) {
    morphFromColumbusViewTo2D(this, duration);
  } else {
    morphFrom3DTo2D(this, duration, ellipsoid);
  }

  ...
};
function morphFrom3DTo2D(transitioner, duration, ellipsoid) {
  ...

  const complete = complete2DCallback(endCamera);
  ...
}
function complete2DCallback(camera2D) {
  return function (transitioner) {
    ...
    camera.position.z = scene.mapProjection.ellipsoid.maximumRadius * 2.0;
    // console.log(scene.mapProjection.ellipsoid.maximumRadius * 2.0);
    ...
  };
}

确实是相机高度问题, scene.mapProjection.ellipsoid.maximumRadius是个常数,API解释为获取椭球的最大半径为6,378,137,此处为地球半径。所以三维转二维相机高度一直为12756274米,如果超过这个数值的话就不会显示模型。

解决办法为初始化后手动设置相机z值,具体大小视情况而定

viewer.scene.morphComplete.addEventListener(function() {
	if(viewer.scene.mode === 2) {
		viewer.scene.camera.position.z = 63781370;
	}
})

 参考文章:http://cesium.coinidea.com/topic/839.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值