PolygonOutlineGeometry
带有轮廓线的多边形
以下是 PolygonOutlineGeometry
类的构造函数属性,以表格形式展示:
0.0 | |||
VertexFormat.DEFAULT | |||
Ellipsoid.default | |||
CesiumMath.RADIANS_PER_DEGREE | |||
false | |||
ArcType.GEODESIC | ArcType.GEODESIC 和 ArcType.RHUMB 。 |
以下是 PolygonOutlineGeometry
类的静态方法和属性:
以下是 createGeometry
方法的参数和返回值:
以下是 fromPositions
方法的参数:
以下是 pack
方法的参数和返回值:
0 |
返回值:被打包的数组。
以下是 unpack
方法的参数和返回值:
0 | |||
返回值:修改后的结果参数或如果没有提供新实例,则为一个新的 PolygonOutlineGeometry 实例。
案例:
添加带有轮廓线的多边形包含以下步骤:
定义多边形轮廓线( polygon1
):
使用 Cesium.PolygonOutlineGeometry
构造函数创建了一个多边形轮廓线的几何体。通过 polygonHierarchy
属性定义了多边形的层次结构,包括一个外部轮廓和嵌套的内部孔。这些轮廓和孔是通过经纬度(度为单位)数组定义的,然后这些经纬度被转换成Cesium的Cartesian3
坐标系统。这里定义了一个具有一个外部轮廓和两个内部孔(其中一个内部孔还有一个更小的内部孔)的复杂多边形。
geometry1
):调用 Cesium.PolygonOutlineGeometry.createGeometry(polygon1)
将polygon1
几何体定义转换为Cesium引擎可以理解的格式,这涉及到实际的几何计算,如顶点、边和面的生成。
polygonInstance1
):使用 Cesium.GeometryInstance
构造函数将geometry1
与额外的属性(如颜色)关联起来,创建一个几何体实例。这里设置了颜色为蓝色,并给实例指定了一个ID。
polygon2
)并转换为可渲染的几何体(geometry2
):使用 Cesium.PolygonOutlineGeometry.fromPositions
快捷方式从一组点直接创建另一个多边形轮廓线的几何体,并指定了一个拉伸高度(extrudedHeight
),使其具有立体感。类似于 polygon1
,调用createGeometry
方法来准备渲染。
polygonInstance2
):类似于 polygonInstance1
,但这次将颜色设置为红色,并给实例指定了另一个ID。
使用 Cesium.Primitive
构造函数创建一个Primitive,这是一个可以在Cesium场景中渲染的图形对象。这里指定了两个几何体实例(polygonInstance1
和polygonInstance2
)作为要渲染的内容。asynchronous
属性设置为false
,但在这种情况下,对于PolygonOutlineGeometry
,这个属性实际上不会影响渲染过程,因为轮廓线的渲染通常是同步的。设置了 appearance
属性,使用Cesium.PerInstanceColorAppearance
来根据每个实例的颜色属性进行渲染。这里指定了渲染不应是半透明的(translucent: false
),并且使用平面阴影(flat: true
),意味着渲染时不考虑光照效果。最后,将Primitive添加到Cesium Viewer的场景( viewer.scene.primitives
)中,以便在3D地球仪上渲染这两个多边形轮廓线。
// 定义一个函数,该函数接收一个 Cesium 视图器(Cesium.Viewer)实例作为参数
addPolygonOutlineGeometry(viewer) {
// 创建一个 PolygonOutlineGeometry 实例,用于描述一个多边形的轮廓线
// 这里定义了一个复杂的多边形,它有一个外部轮廓和多个内部孔
let polygon1 = new Cesium.PolygonOutlineGeometry({
// polygonHierarchy 定义了多边形的层次结构
polygonHierarchy : new Cesium.PolygonHierarchy(
// 外部轮廓的顶点数组,通过经纬度转换而来
Cesium.Cartesian3.fromDegreesArray([
-109.0, 30.0,
-95.0, 30.0,
-95.0, 40.0,
-109.0, 40.0
]),
// 内部孔的层次结构数组,这里定义了两个内部孔
[
new Cesium.PolygonHierarchy(
// 第一个内部孔的顶点数组
Cesium.Cartesian3.fromDegreesArray([
-107.0, 31.0,
-107.0, 39.0,
-97.0, 39.0,
-97.0, 31.0
]),
// 第一个内部孔内部的孔(如果有的话),这里还有一个内部孔
[
new Cesium.PolygonHierarchy(
// 第二个内部孔的顶点数组
Cesium.Cartesian3.fromDegreesArray([
-105.0, 33.0,
-99.0, 33.0,
-99.0, 37.0,
-105.0, 37.0
]),
// 第二个内部孔内部的孔(这里没有定义,所以是空的)
[]
)
]
)
]
)
});
// 将 PolygonOutlineGeometry 实例转换为实际可用于渲染的几何体
let geometry1 = Cesium.PolygonOutlineGeometry.createGeometry(polygon1);
// 创建一个 GeometryInstance 实例,将上述几何体与其他属性(如颜色)关联起来
let polygonInstance1 = new Cesium.GeometryInstance({
geometry: geometry1,
// 为这个几何体实例设置颜色属性,这里设置为蓝色
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE)
},
// 为这个几何体实例设置一个唯一的标识符
id: 'polygonInstance1'
});
// 使用一组点直接创建一个新的 PolygonOutlineGeometry 实例
let polygon2 = Cesium.PolygonOutlineGeometry.fromPositions({
// 点的数组,通过经纬度转换而来
positions : Cesium.Cartesian3.fromDegreesArray([
-72.0, 40.0,
-70.0, 35.0,
-75.0, 30.0,
-70.0, 30.0,
-68.0, 40.0
]),
// 设置多边形的拉伸高度,使其具有立体感
extrudedHeight: 300000
});
// 将 PolygonOutlineGeometry 实例转换为实际可用于渲染的几何体
let geometry2 = Cesium.PolygonOutlineGeometry.createGeometry(polygon2);
// 为第二个多边形轮廓线创建一个 GeometryInstance 实例,并设置颜色为红色
let polygonInstance2 = new Cesium.GeometryInstance({
geometry: geometry2,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
},
id: 'polygonInstance2'
});
// 创建一个 Primitive 实例,用于将多个几何体实例渲染到 Cesium 场景中
let primitive = new Cesium.Primitive({
// 包含要渲染的几何体实例数组
geometryInstances: [polygonInstance1, polygonInstance2],
// 注意:对于 PolygonOutlineGeometry,asynchronous 参数通常不影响渲染过程,
// 因为 PolygonOutlineGeometry 的渲染是同步的
asynchronous: false,
// 设置 Primitive 的外观,这里使用 PerInstanceColorAppearance 来根据每个实例的颜色属性进行渲染
appearance: new Cesium.PerInstanceColorAppearance({
// 设置几何体不是半透明的
translucent: false,
flat: true,//当 true 时,片段着色器中将使用平面阴影,这意味着不考虑光照
})
});
viewer.scene.primitives.add(primitive);
}