我是CesiumJs的新手,我想在建筑物上添加12层楼。我使用多边形创建了建筑物。
这是我用来创建多边形的代码
var viewer = new Cesium.Viewer('cesiumContainer');
var wyoming = viewer.entities.add({
name : 'My location',
polygon : {
hierarchy : Cesium.Cartesian3.fromDegreesArray([cordinates of location]),
material : Cesium.Color.WHITE.withAlpha(0.5),
outline : true,
fill : true,
outlineColor : Cesium.Color.BLACK,
}
});
wyoming.polygon.extrudedHeight = 50;
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-79.38443,43.64843, 144.00),
orientation : {
heading : Cesium.Math.toRadians(121.00),
pitch : Cesium.Math.toRadians(60.00 - 90.0),
roll : 0.0
},
duration : 4.0, // in seconds
complete : function() {
},
point : {
pixelSize : 5,
color : Cesium.Color.RED,
outlineColor : Cesium.Color.WHITE,
outlineWidth : 2
},
label : {
text : 'My another location',
font : '14pt monospace',
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth : 2,
verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
pixelOffset : new Cesium.Cartesian2(0, -9)
}
});
提前致谢
答案 0 :(得分:0)
在这种情况下,您需要比挤压多边形更复杂的东西。
如果您需要一个具有交替颜色的地板的简单建筑物,您可以使用带有条纹材料的Wall实体构建它,并将多边形放在它上面作为“屋顶”(使用相同的坐标,将height属性设置为高度为墙,而不是设置extrusionHeight)。
这将创建具有交替的黑色和白色地板的墙壁:
function createBuildingWalls(coordinates, floors)
{
var floorHeight = 4;
var height = floors * floorHeight;
var low = Array.apply(null, Array(coordinates.length/2)).map(function() { return 0 });
var high = Array.apply(null, Array(coordinates.length/2)).map(function() { return height });
var buildingWalls = new Cesium.Entity({
name : 'Wall',
wall : {
positions : Cesium.Cartesian3.fromDegreesArray(coordinates),
maximumHeights : high,
minimumHeights : low,
material : new Cesium.StripeMaterialProperty({
evenColor : Cesium.Color.WHITE,
oddColor : Cesium.Color.BLACK,
repeat : 20
})
}});
return buildingWalls;
}
这个屋顶(可能会遇到很大的多边形问题,但建筑物应该没问题):
function createBuildingRoof(coordinates, floors)
{
var floorHeight = 4;
var buildingHeight = floors * floorHeight;
var buildingRoof = new Cesium.Entity({
name : 'My location',
polygon : {
hierarchy : Cesium.Cartesian3.fromDegreesArray(coordinates),
material : Cesium.Color.RED.withAlpha(0.9),
outline : true,
height : buildingHeight,
fill : true,
outlineColor : Cesium.Color.BLACK,
}
});
return buildingRoof;
}
您还可以使用纹理(图像)作为材质并将其应用到墙上,但它更复杂。您需要设置ImageMaterial属性,并根据纹理的类型设置重复属性(即重复单个楼层verticaly,或单个12层条纹水平或其他组合) http://cesiumjs.org/Cesium/Build/Documentation/ImageMaterialProperty.html
其他解决方案是使用建筑物的3D模型: http://cesiumjs.org/2014/03/03/Cesium-3D-Models-Tutorial/