是否有可能绘制一个CZML多边形,只有多边形的轮廓,没有材料覆盖的边多边形?
这是必需的,因为我的要求是让点击一个物体完全沉浸在多边形,即,没有边的内部多边形与侧面的外部多边形。所以我只想画一个多边形轮廓,让内部多边形听,点击事件。
发布于 2016-12-13 07:52:06
非常感谢@emackey给出的描述性回答。你的答案是有用的,我想增加多边形轮廓的宽度。
但是实现中空多边形(只有轮廓的多边形)的更容易的方法是这里。将CZML多边形的fill属性设置为false为我工作。
发布于 2016-11-23 17:01:42
如果我正确理解,是的,你可以设置多边形的内部颜色是完全透明的,这样只有轮廓是可见的或可点击的。这种方法有一些缺点,我将在下面解释,但首先,下面是一个工作示例:
var czml = [{
"id" : "document",
"name" : "CZML Geometries: Polygon",
"version" : "1.0"
}, {
"id" : "outlinedPolygon",
"name" : "Outlined Polygon",
"polygon" : {
"positions" : {
"cartographicDegrees" : [
-108.0, 25.0, 0,
-100.0, 25.0, 0,
-100.0, 30.0, 0,
-108.0, 30.0, 0
]
},
"material" : {
"solidColor" : {
"color" : {
"rgba" : [0, 0, 0, 0]
}
}
},
"extrudedHeight" : 0,
"perPositionHeight" : true,
"outline" : true,
"outlineColor" : {
"rgba" : [255, 255, 0, 255]
}
}
}];
var viewer = new Cesium.Viewer('cesiumContainer');
var dataSource = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSource);
viewer.zoomTo(dataSource);现在的问题是:许多基于Windows的系统和其他WebGL实现除了精确的1.0像素外不允许行宽。这意味着你的多边形在许多系统上总是有一个很薄的轮廓。
另一个缺点是渲染器可能仍然会考虑并丢弃多边形内部的所有透明片段,这可能会影响性能。
两者的解决方案都是使用折线而不是多边形来绘制轮廓。铯有一个自定义的系统,用于绘制多条线作为屏幕空间多边形,避免了影响许多用户的1像素WebGL线限制。此外,Polyline也不会试图以任何方式填充封闭区域。
你必须重复第一点作为最后一点,使折线完全包围一个区域。下面是一个例子:
var czml = [{
"id" : "document",
"name" : "CZML Geometries: Polyline",
"version" : "1.0"
}, {
"id" : "outlinedPolygon",
"name" : "Outlined Polygon",
"polyline" : {
"positions" : {
"cartographicDegrees" : [
-108.0, 25.0, 0,
-100.0, 25.0, 0,
-100.0, 30.0, 0,
-108.0, 30.0, 0,
-108.0, 25.0, 0
]
},
"width": 5,
"material" : {
"solidColor" : {
"color" : {
"rgba" : [255, 255, 0, 255]
}
}
}
}
}];
var viewer = new Cesium.Viewer('cesiumContainer');
var dataSource = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSource);
viewer.zoomTo(dataSource);https://stackoverflow.com/questions/40767011
复制相似问题