通用的Cesium自动调整倾斜模型高度贴合地形的方法

通用的Cesium自动调整倾斜模型高度贴合地形的方法

倾斜模型自带地形起伏,该地形起伏的精度与测量精度有关,精度不在本文讨论范围内,本文讨论的是,如何在Cesium加载倾斜数据时,自动调整其变换矩阵,使其更加贴近真实地表。

一般情况下,若不调整,倾斜数据要么整体悬在上空,要么整体下陷到地里,所以我们要找到一个高度作为调整的高度,又由于Cesium使用的是笛卡尔坐标系,矩阵变换也使用该坐标系,所以不能通过单纯调整一个轴的值就试图实现该目标,因为笛卡尔坐标系没有哪个轴对应我们理解意义上的垂直地面高度。参见另一篇博客:笛卡尔坐标系是什么鬼

具体实现方法如下:

var tileset=viewer.scene.groundPrimitives.add(new Cesium.Cesium3DTileset({
                url: url,//此处填写tileset url地址
            }));
tileset.readyPromise.then(function (tileset) {               
    var boundingSphere = tileset.boundingSphere;
    var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);//获取到倾斜数据中心点的经纬度坐标(弧度)
    var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);//倾斜数据中心点的笛卡尔坐标      
     var positions = [Cesium.Cartographic.fromDegrees(cartographic.longitude,cartographic.latitude)];
     var promise = Cesium.sampleTerrainMostDetailed(terrainProvider, positions);//其中terrainProvider是当前场景使用的高程Provider
     Cesium.when(promise, function(updatedPositions) {
         var terrainHeight = updatedPositions[0].height;//高程
         var offset=Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, terrainHeight);//带高程的新笛卡尔坐标
         var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());//做差得到变换矩阵
         tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
});

 }).otherwise(function (error) {
                console.log(error);
            });

具体思路是通过中心点带高程的新笛卡尔坐标与原中心点不带高程的笛卡尔坐标做差得到变换矩阵。

实验证明用这种方法可以使倾斜数据完全贴合地表高程(排除测量细微精度影响),而且不用手动程序,全部自动执行。

### Cesium调整倾斜摄影模型贴地方法Cesium 中处理倾斜摄影模型使其底部正确贴合地面通常涉及几个方面的工作。为了实现这一目标,可以考虑使用 `Cesium3DTileset` 的属性来微调模型的位置和高度。 通过设置 `heightOffset` 属性能够有效地让模型沿垂直方向移动,从而更好地匹配地形表面[^1]: ```javascript var tileset = new Cesium.Cesium3DTileset({ url : 'path/to/tileroot.json' }); viewer.scene.primitives.add(tileset); // 设置高度偏移量使模型贴近地面 tileset.heightOffset = -5; // 这里的数值可能需要根据实际情况调整 ``` 另外一种方式是利用 `clamping` 功能,这可以让对象自动适应底层地理数据的高度变化。不过需要注意的是,在某些版本中此功能对于倾斜摄影的支持可能存在局限性[^2]。 如果上述两种简单的方法无法满足需求,则建议尝试加载高精度DEM(Digital Elevation Model),并启用全局光照效果以及阴影投射等功能增强视觉真实性的同时也间接帮助解决了部分贴地问题[^3]。 #### 使用 DEM 数据改进贴地效果 当引入了高质量的数字高程模型之后,可以通过如下代码片段开启基于真实世界地貌特征的渲染模式: ```javascript viewer.terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.cesium.com/stk-terrain/tilesets/world/wgs84/tiles/' }); // 启用针对特定图层的应用程序逻辑以优化显示质量 tileset.readyPromise.then(function() { viewer.scene.globe.depthTestAgainstTerrain = true; }).otherwise(function(error){ console.log(error); }); ``` 以上措施综合运用可以在很大程度上改善倾斜摄影模型与实际地形之间的契合度。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值