cesium 模型压平处理
时间: 2023-08-02 10:05:50 浏览: 174
在Cesium中,将模型压平并投影到地面上可以通过以下步骤实现:
1. 在Cesium中加载模型,并将其转换为三角形网格:
```javascript
var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({
url : 'path/to/model.gltf'
}));
var geometry = model.getGeometryInstanceAttributes('box').vertexPositions;
var indices = model.getGeometryInstanceAttributes('box').indices;
var flattenedVertices = Cesium.Matrix4.multiplyByPoint(model.modelMatrix, geometry, new Array(geometry.length));
```
2. 创建一个几何体,用于表示模型在地面上的投影。
```javascript
var projection = new Cesium.PolylineVolumeGeometry({
polylinePositions : Cesium.Cartesian3.fromDegreesArray([lon1, lat1, lon2, lat2]),
shapePositions : flattenedVertices
});
var flattenedProjection = projection.createGeometryInstance(normalizedDistance);
```
其中,`polylinePositions`是指用于定义投影线段的起点和终点的经纬度坐标,`shapePositions`是指用于定义投影形状的三角形网格顶点坐标。
3. 创建一个新的模型实例,并将投影几何体添加到其中:
```javascript
var flattenedModel = new Cesium.Model({
geometryInstances : flattenedProjection,
modelMatrix : Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(lon, lat, height)),
id : 'flattened-model'
});
viewer.scene.primitives.add(flattenedModel);
```
其中,`geometryInstances`是指用于定义模型几何体的集合,这里将投影几何体添加到其中;`modelMatrix`是指用于定义模型位置、方向和缩放的变换矩阵,这里使用`Cesium.Transforms.eastNorthUpToFixedFrame`函数将模型放置在地球表面上。
这样就可以将Cesium模型压平并投影到地面上了。
阅读全文