关于cesium的entity设置outlinewidth不成功的问题

最近写代码的时候发现,viewer.entities.add方法添加entity的时候添加outlinewidth不管是写多少好像都不生效只能默认是1,

例如:

const entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-95.0, 40.0),
  ellipse: {
    semiMajorAxis: 50000,  
    semiMinorAxis: 50000,  
    material: Cesium.Color.RED.withAlpha(0.5),
    outline: true,
    outlineColor: Cesium.Color.WHITE,
    outlineWidth: 20,       
    height: 0,
    classificationType: Cesium.ClassificationType.TERRAIN
  }
});

虽然写了20但是实际显示的还是1,发现原因是由于 WebGL 的线宽限制,可以用一下方法验证一下你的浏览器支不支持

const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
console.log(gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)); 
// 输出示例:[1, 1],表示仅支持1像素

解决方法:
使用线在polygon外围包一圈

    polygon: {
      hierarchy: Cesium.Cartesian3.fromDegreesArray(coordinates),
      material: Cesium.Color.RED,
      outline: true,
      outlineColor: Cesium.Color.WHITE,
      outlineWidth: 10,
      fill: false
},
polyline:{
positions:Cesium.Cartesian3.fromDegreesArray(coordinates),
 material: Cesium.Color.RED,
}

或者叠加法(适合没有加透明度的):

// 外圆(作为“边”)
let circle=viewer.entities.add({
  position: center,
  ellipse: {
    semiMajorAxis: radius + outlineWidth,
    semiMinorAxis: radius + outlineWidth,
    material: Cesium.Color.BLUE,
    height: 0
  }
});

// 内圆(作为“填充”)
viewer.entities.add({
  position: center,
  ellipse: {
    semiMajorAxis: radius,
    semiMinorAxis: radius,
    material: Cesium.Color.RED,
    height: 0,
    fill: true,
    height: 1
  }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值