分析:此原因是因为地形导致,可以尝试将primitive设置高程(高度)如5000m,此时图形位置由于高于山峰等地形,图形可以显示完整。
但是如果几何图形必须要贴地(高度为0m)呢?
解决方法:
1.设置scene.globe.depthTestAgainstTerrain = false;即不进行地形深度测试,也就忽略了地形。这时可以正常显示几何图形。
2.使用GroundPrimitive。顾名思义,这是帮助你将几何图形贴地的类。
scene.primitives.add(new Cesium.GroundPrimitive({
geometryInstances : instances,
appearance : new Cesium.PerInstanceColorAppearance()
}));
这里给出官方的解释:
A ground primitive represents geometry draped over the terrain in the Scene
. The geometry must be from a single GeometryInstance
. Batching multiple geometries is not yet supported.
A primitive combines the geometry instance with an Appearance
that describes the full shading, including Material
and RenderState
. Roughly, the geometry instance defines the structure and placement, and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix and match most of them and add a new geometry or appearance independently of each other. Only the PerInstanceColorAppearance
is supported at this time.
For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there will be rendering artifacts for some viewing angles.
Valid geometries are CircleGeometry
, CorridorGeometry
, EllipseGeometry
, PolygonGeometry
, and RectangleGeometry
.
这里给出官方demo:
var rectangleInstance = new Cesium.GeometryInstance({
geometry : new Cesium.RectangleGeometry({
rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)
}),
id : 'rectangle',
attributes : {
color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)
}
});
scene.primitives.add(new Cesium.GroundPrimitive({
geometryInstances : rectangleInstance
}));