Aquí, estoy usando el siguiente código para el mapa 3D. Y esto crea semi elipsoide debajo de la superficie del suelo en caso de área de terreno.
var viewer = new Cesium.Viewer("cesiumContainer", { terrainProvider: Cesium.createWorldTerrain(), }); viewer.scene.globe.depthTestAgainstTerrain = true; viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; var radiusX = 720; var radiusY = 720; var radiusZ = 600; // radius in the up direction var entityPosition = Cesium.Cartesian3.fromDegrees(82.88827, 39.50256, 0 ); viewer.scene.primitives.add(new Cesium.DebugModelMatrixPrimitive({ modelMatrix : Cesium.Transforms.eastNorthUpToFixedFrame(entityPosition), length : radiusZ, width : 1.0 })); var entiti_ellipsoid = viewer.entities.add({ position: entityPosition, ellipsoid: { radii: new Cesium.Cartesian3(radiusX, radiusY, radiusZ), maximumCone: Cesium.Math.PI_OVER_TWO, material: Cesium.Color.fromRandom({ alpha: 0.5 }), //clampToGround: true, // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, }, }); viewer.zoomTo(entiti_ellipsoid); var viewer = new Cesium.Viewer("cesiumContainer", { terrainProvider: Cesium.createWorldTerrain(), }); viewer.scene.globe.depthTestAgainstTerrain = true; viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; var longitude = 82.88827; var latitude = 39.50256; var radiusX = 720; var radiusY = 720; var radiusZ = 600; // radius in the up direction viewer.camera.flyToBoundingSphere(new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(longitude, latitude, 1000), radiusZ * 2)); var drawn = false; viewer.scene.globe.tileLoadProgressEvent.addEventListener(function (queuedTileCount) { if (drawn) return; console.log(queuedTileCount); console.log(viewer.scene.globe.tilesLoaded); if (viewer.scene.globe.tilesLoaded) { var height = viewer.scene.globe.getHeight(Cesium.Cartographic.fromDegrees(longitude, latitude)); console.log(height); var entityPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude, height); viewer.scene.primitives.add(new Cesium.DebugModelMatrixPrimitive({ modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(entityPosition), length: radiusZ, width: 1.0 })); var entiti_ellipsoid = viewer.entities.add({ position: entityPosition, ellipsoid: { radii: new Cesium.Cartesian3(radiusX, radiusY, radiusZ), maximumCone: Cesium.Math.PI_OVER_TWO, material: Cesium.Color.fromRandom({alpha: 0.5}), //clampToGround: true, // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, }, }); drawn = true; } });