Cesium CallbackProperty 在ellipsoid中表现异常

cesium版本号:1.86.1

复现工具:Cesium Sandcastle

异常现象:ellipsoid中的属性如果使用了CallbackProperty,其innerRadii会表现异常,渲染的效果不符合预期。

解决方案:有,但是不完美。通过系数回乘,修复innerRadii的数值异常。系数为√3


问题复现

1.不使用CallbackProperty

const viewer = new Cesium.Viewer("cesiumContainer", {});
const num = 1000;
const _num = 500;
const ellipsoid = viewer.entities.add({
  name: '测试几何体',
  position:Cesium.Cartesian3.fromDegrees(120,30,0),
  ellipsoid:{
      radii: new Cesium.Cartesian3(num, num, num),
      innerRadii: new Cesium.Cartesian3(_num, _num, _num),
      minimumCone: Cesium.Math.toRadians(0),
      maximumCone: Cesium.Math.toRadians(180),
      minimumClock: Cesium.Math.toRadians(90),
      maximumClock: Cesium.Math.toRadians(450),
      material: Cesium.Color.fromCssColorString('rgba(178, 212, 237, 0.5)'),
  },
});
viewer.flyTo(ellipsoid);
console.log(viewer);

2.使用CallbackProperty,设置isContant为true

const viewer = new Cesium.Viewer("cesiumContainer", {});
const num = 1000;
const _num = 500;
const ellipsoid = viewer.entities.add({
  name: '测试几何体',
  position:Cesium.Cartesian3.fromDegrees(120,30,0),
  ellipsoid:{
      radii: new Cesium.Cartesian3(num, num, num),
      innerRadii: new Cesium.CallbackProperty(() => {
        return new Cesium.Cartesian3(_num, _num, _num);
      }, true),
      minimumCone: Cesium.Math.toRadians(0),
      maximumCone: Cesium.Math.toRadians(180),
      minimumClock: Cesium.Math.toRadians(90),
      maximumClock: Cesium.Math.toRadians(450),
      material: Cesium.Color.fromCssColorString('rgba(178, 212, 237, 0.5)'),
  },
});
viewer.flyTo(ellipsoid);
console.log(viewer);

3.使用CallbackProperty,设置isContant为false

const viewer = new Cesium.Viewer("cesiumContainer", {});
const num = 1000;
const _num = 500;
const ellipsoid = viewer.entities.add({
  name: '测试几何体',
  position:Cesium.Cartesian3.fromDegrees(120,30,0),
  ellipsoid:{
      radii: new Cesium.Cartesian3(num, num, num),
      innerRadii: new Cesium.CallbackProperty(() => {
        return new Cesium.Cartesian3(_num, _num, _num);
      }, false),
      minimumCone: Cesium.Math.toRadians(0),
      maximumCone: Cesium.Math.toRadians(180),
      minimumClock: Cesium.Math.toRadians(90),
      maximumClock: Cesium.Math.toRadians(450),
      material: Cesium.Color.fromCssColorString('rgba(178, 212, 237, 0.5)'),
  },
});
viewer.flyTo(ellipsoid);
console.log(viewer);


问题讨论

        目前效果是复现1和复现2的那种,需求是想在此基础上,针对个别属性进行动态更新,为此才采用了CallbackProperty。不曾想,使用了CallbackProperty更新属性后,内径的实际渲染和预期数据不一致。明显可以看到比预设少了一半还多。经过反复测试演算,发现缩小的系数为√3。如下代码,在预定值中乘以该系数,可以重新得到自己的预期值。

const viewer = new Cesium.Viewer("cesiumContainer", {});
const num = 1000;
const _num = 500 * Math.sqrt(3);
const ellipsoid = viewer.entities.add({
  name: '测试几何体',
  position:Cesium.Cartesian3.fromDegrees(120,30,0),
  ellipsoid:{
      radii: new Cesium.Cartesian3(num, num, num),
      innerRadii: new Cesium.CallbackProperty(() => {
        return new Cesium.Cartesian3(_num, _num, _num);
      }, false),
      minimumCone: Cesium.Math.toRadians(0),
      maximumCone: Cesium.Math.toRadians(180),
      minimumClock: Cesium.Math.toRadians(90),
      maximumClock: Cesium.Math.toRadians(450),
      material: Cesium.Color.fromCssColorString('rgba(178, 212, 237, 0.5)'),
  },
});
viewer.flyTo(ellipsoid);
console.log(viewer);


备注

        暂时未找到具体的错误原因,回乘系数也只是逐步推测算出来的。待后续更新······ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地狱小拖拉机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值