NearFarScalar和pixelOffsetScaleByDistance是Billboard和Label都有的两个属性,共同点是随着镜头到物体的距离的变化,对其属性的改变
一、NearFarScalar:根据摄像机的距离来设置缩放比例
scaleByDistance = new Cesium.NearFarScalar(100, 0.8, 1000, 0.2)
含义:从100米到1000米,随着距离拉远,缩放比例由0.8插值变成0.2
0-100米,缩放比固定为0.8
100-1000米,缩放比随着距离变大,由0.8插值变成0.2
1000米以上,缩放比固定为0.2
二、pixelOffsetScaleByDistance:根据摄像机的距离来设置像素偏移
pixelOffsetScaleByDistance = new Cesium.NearFarScalar(100, 5, 1000, 15);
含义:从100米到1000米,随着距离拉远,像素偏移由5插值变成15
0-100米,像素偏移固定为0.8
100-1000米,像素偏移随着距离变大,由5插值变成15
1000米以上,像素偏移固定为0.2
待验证:这个偏移量是x方向还是y方向?
pixelOffset = new Cesium.Cartesian2(0.0, 1.0);这个属性上第一个参数是x方向,第二个参数是y方向。那么pixelOffsetScaleByDistance的方向怎么判断呢?感谢大佬指点
三、当同时画Billboard和Label的时候,建议同时设置scaleByDistance,如果有偏移则需要设置pixelOffset+pixelOffsetScaleByDistance,并且pixelOffsetScaleByDistance=scaleByDistance
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),
billboard: {
image: './image.png',
scaleByDistance: new Cesium.NearFarScalar(10, 1.5, 100, 0.5),
},
label: {
text: name,
font: '12px',
scaleByDistance: new Cesium.NearFarScalar(10, 1.5, 100, 0.5),
pixelOffset: new Cesium.Cartesian2(0, -65),
pixelOffsetScaleByDistance: new Cesium.NearFarScalar(10, 1.5, 100, 0.5),
}
})