Cesium学习笔记(5)

1.更改cesium的选择框大小
在Souce/Widgets/SelectionIndicator/SelectionIndicator.js中修改:
Cesium学习笔记(5)_第1张图片
在Souce/Widgets/SelectionIndicator/ SelectionIndicator.css中修改:
Cesium学习笔记(5)_第2张图片
2.对于label和billboard字体或图片不清晰问题的解决方案:

原因:billboard是栅格图像,处在非整型像素位置上的效果要比像素位置一致的要差很多。而且目前模糊特性似乎是当前的fxaa系统特意设计的,

解决方案:采用1.28版本及以上,然后在Source/Shaders/BillboardCollectionVS.js文件中,找到gl_Position = czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);这句,修改成 gl_Position = czm_viewportOrthographic * vec4(floor(positionWC.xy + 0.5), -positionWC.z, 1.0); 同时设置viewer.scene.fxaa = false;

这样使billboard和label采用1*1像素大小绘制。但是这样会使线产生锯齿,期待更好的解决办法。

3.label被ploygon挡住
原因:因为label处在3D空间内,所以会被多边形或者地形挡住,理想情况下,你想让label完全可见或者完全不可见要取决于它的位置,但这实际上是一个非常难以解决的问题(不仅在cesium中,其他3D球也一样),最好的解决方法是让label的eyeoffset的z值为负。eyeoffset能够基于viewer的位置来移动label或billboard的渲染位置。x为正移动到viewer的右边,y为正向上移动,z为正就移动到屏幕里面。通过只设置z值为负,这个label就会更加的接近用户,它就会被渲染在polygon之上。

解决: label.eyeOffset = new Cesium.ConstantProperty(new Cesium.Cartesian3(0, 0, -100000));

备注:这种方式有两个缺点,尽管它们在许多用例中不影响大局,但是也应该了解:
①:当viewer在z值的长度内时,它将会消失,因为它现在在viewer的后面
②:如果在你的label之前有别的东西,比如是另一个shape或者volume,距离比z值小,那么这个label将会显示在这个东西之上,因为label的渲染位置更接近于我们。

你可能感兴趣的:(cesium,webgl,cesium)