CESIUM例子学习(七) | 您所在的位置:网站首页 › classification的用法 › CESIUM例子学习(七) |
这是一个非常有用的例子。主要讲的是在3dtiles倾斜摄影上的绘制与单体化实现。 一、在倾斜摄影上绘制线(失败!)原因找到了,版本问题该例子的第一个是以三种模式绘制线,即帖地模式、帖3dtiles模式和两同时绘制模式。 1、例子原码: var polyline = viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArray([ -75.60217330403601, 40.04102882709425, -75.59968252414251, 40.04093615560871, -75.598020153828, 40.04079437042357, -75.59674934074435, 40.040816173283304, -75.59630042791713, 40.03986900370842, -75.59563636849978, 40.03930996506271, -75.59492397899098, 40.03873932846581, -75.59457991226778, 40.038392701955786, -75.59424838652453, 40.03775403572295, -75.59387104290336, 40.03677022167725, -75.59355000490342, 40.03588760913535, ]), width: 8, material: new Cesium.PolylineOutlineMaterialProperty({ color: Cesium.Color.YELLOW, outlineWidth: 2, outlineColor: Cesium.Color.BLACK, }), clampToGround: true, }, });代码中也没有什么特别的,主要是: clampToGround: true。然后就是在下拉菜单中配置了 polyline.polyline.classificationType = Cesium.ClassificationType.CESIUM_3D_TILE;从而实现了在3dtiles表面绘制线的功能。实现的效果,如下图: 图中可以看到,地面与3dtiles上都绘制了线。 2、加载线的原码 function drawPolyline () { let linePoints = [ 110.09626992048491, 22.604435413684214, 110.09772947885747, 22.6044007535433, 110.10042821679957, 22.604406197660317, 110.10077969573116, 22.60444694171489, 110.10333075940922, 22.6045239767194, 110.104544609548, 22.604631795978776, 110.10523390730035, 22.60469426643001, 110.10780977717386, 22.605159958646965 ] var polyline = viewer.entities.add({ id: "polyline", polyline: { positions: Cesium.Cartesian3.fromDegreesArray(linePoints), width: 8, material: new Cesium.PolylineOutlineMaterialProperty({ color: Cesium.Color.YELLOW, outlineWidth: 2, outlineColor: Cesium.Color.BLACK, }), clampToGround: true, }, }); polyline.polyline.classificationType = Cesium.ClassificationType.BOTH; }但是我的代码实现的结果却是无法在3dtiles上绘制线。如下图: 我已经放弃了,因为找了好想了很久都没找到原因,后面找到 原因再来更新。 二、倾斜摄影单体化效果四年前就接触过倾斜摄影模型,当时各种转换之后,加载到world wind的三维引擎中,没有实现LOD,效果非常不好,单机本地加载都卡,也没有实现单体化。其实现在的cesium,也没有去真正实现单体化,比如:把建筑物从周边环境中单体化出来,从达到的效果来看,cesium应该是可以实现的,但是没必要了。从可视化效果来说,看上去是单体化的就行了。实现代码如下: function addPolygon () { let polygonHierarchy = new Cesium.PolygonHierarchy([ { x: -2024823.5909592435, y: 5532370.714988579, z: 2436302.25492001 }, { x: -2024826.5283445264, y: 5532369.096897423, z: 2436303.7183121936 }, { x: -2024819.1251608054, y: 5532363.621243293, z: 2436322.269562056 }, { x: -2024791.4827142982, y: 5532376.632168545, z: 2436315.3573567793 }, { x: -2024796.595963898, y: 5532380.507406193, z: 2436302.7104098746 }, { x: -2024816.0491223074, y: 5532372.296575263, z: 2436305.244446241 }, { x: -2024818.6768914957, y: 5532374.524629378, z: 2436299.36777942 }, { x: -2024827.1131517782, y: 5532369.755417354, z: 2436301.917306005 }]) var polygon = viewer.entities.add({ id: "polygon", polygon: { hierarchy: polygonHierarchy, material: Cesium.Color.RED.withAlpha(0.9), classificationType: Cesium.ClassificationType.CESIUM_3D_TILE, }, }); }看上去没什么特别的。只一句: classificationType: Cesium.ClassificationType.CESIUM_3D_TILE就搞定。但是底层的应该是做了很多计算,也就是要从瓦片中找出在绘制多边形内的构成模型的三角面或者点。效果如下图: 三、倾斜摄影单体化效果纹理跟上面加载多边形代码一样,只是把material值改成纹理的url即可。即:material = "../images/Cesium_Logo_Color.jpg"。效果如下图:
|
CopyRight 2018-2019 实验室设备网 版权所有 |