cesium 压平的一种实现方式

        cesium时gis相关开发框架,gis意味着大坐标,javascript方面可以满足gis相关的坐标计算,但是webgl对大坐标精度不能满足要求,所以压平方面的操作使用纯坐标计算不好实现(一种做法是在视图坐标下进行处理,并在空间多边形平面内进行坐标比较),常规的实现方式是类比阴影的处理方式,在压平区域的多边形正上方模拟一个相机,离屏渲染多边形区域的深度图,并将深度图传入模型(或者3DTile)的顶点着色器中,在顶点着色器中将模型顶点转换到模拟的相机空间下,然后转换到投影空间,投影空间下的坐标在【0~1】的范围内,并在多边形的区域内,使用多边形的高度,不在范围内不用处理。

        缺点:压平是按照比例处理的,效果不平

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Cesium压平实现代码的示例: ```javascript // 获取模型的顶点 var positions = model.geometry.attributes.position.values; // 计算模型的中心点 var center = Cesium.BoundingSphere.fromVertices(positions).center; // 将顶点转换为笛卡尔坐标 for (var i = 0; i < positions.length; i += 3) { var position = Cesium.Cartesian3.fromArray(positions, i); positions[i] = position.x - center.x; positions[i + 1] = position.y - center.y; positions[i + 2] = position.z - center.z; } // 压平模型 Cesium.Matrix4.multiplyByTranslation( model.modelMatrix, center, model.modelMatrix ); model.readyPromise.then(function (model) { var boundingSphere = model.boundingSphere; var height = boundingSphere.radius; var plane = new Cesium.Plane( new Cesium.Cartesian3(0, 0, 1), -height ); var translation = Cesium.Transforms.eastNorthUpToFixedFrame( boundingSphere.center ); var rotation = Cesium.Quaternion.fromRotationMatrix(translation); var transform = Cesium.Matrix4.fromRotationTranslation( rotation, Cesium.Cartesian3.ZERO ); var inverseTransform = Cesium.Matrix4.inverse(transform, new Cesium.Matrix4()); var planeProjection = new Cesium.Matrix4(); Cesium.Matrix4.multiply( inverseTransform, translation, planeProjection ); Cesium.Matrix4.multiply( planeProjection, transform, planeProjection ); Cesium.Matrix4.multiply( model.modelMatrix, planeProjection, model.modelMatrix ); }); ``` 这段代码首先获取了3D模型的顶点,然后计算模型的中心点,并将顶点转换为笛卡尔坐标。接下来,通过Cesium的Matrix4.multiplyByTranslation方法将模型转换为以中心点为原点的坐标系。 最后,通过Cesium.Plane对象创建一个平面,将模型投影到该平面上,并将投影后的模型与原始模型进行合并,从而实现压平效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值