cesium怎么实现拍平效果
时间: 2023-12-01 18:29:02 浏览: 112
在 Cesium 中实现拍平效果可以通过以下两种方式实现:
1. 使用 TerrainExaggeration 属性
可以通过设置 `viewer.terrainExaggeration` 属性来实现拍平效果。这个属性可以设置地形的垂直缩放比例,将其值设置为 `0.0` 就可以实现拍平效果,示例代码如下:
```javascript
viewer.terrainExaggeration = 0.0;
```
2. 使用自定义着色器
可以通过自定义 Cesium 的着色器来实现拍平效果。这个方法需要使用到 Cesium 的 ShaderMaterial 类。首先,你需要创建一个自定义的着色器,并在其中将高度值设置为 0。示例代码如下:
```javascript
var fs = `
varying vec3 v_positionEC;
void main()
{
gl_FragColor = vec4(v_positionEC, 1.0);
}
`;
var vs = `
attribute vec3 position;
varying vec3 v_positionEC;
void main() {
vec4 pos = czm_modelViewProjection * vec4(position, 1.0);
v_positionEC = position;
gl_Position = pos;
}
`;
var material = new Cesium.ShaderMaterial({
vertexShaderSource: vs,
fragmentShaderSource: fs,
renderState: {
depthTest: {
enabled: true
},
depthMask: true,
blending: Cesium.BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,
lineWidth: Math.min(3.0, scene.maximumAliasedLineWidth)
}
});
```
然后,你需要将这个着色器应用到场景中的每个 Primitive 上。示例代码如下:
```javascript
viewer.scene.primitives.add(new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray([
-109.0, 45.0,
-95.0, 45.0,
-95.0, 40.0,
-109.0, 40.0
])
),
perPositionHeight: true
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
},
id: 'polygon',
pickPrimitive: new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray([
-109.0, 45.0,
-95.0, 45.0,
-95.0, 40.0,
-109.0, 40.0
])
),
perPositionHeight: true
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
},
id: 'polygon',
pickPrimitive: new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.EllipsoidGeometry({
radii: new Cesium.Cartesian3(1000000.0, 1000000.0, 1000000.0),
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
}),
modelMatrix: Cesium.Matrix4.multiplyByTranslation(
Cesium.Transforms.eastNorthUpToFixedFrame(
Cesium.Cartesian3.fromDegrees(-107.0, 40.0)
),
new Cesium.Cartesian3(0.0, 0.0, 500000.0),
new Cesium.Matrix4()
),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.WHITE)
}
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: material
})
})
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: material
})
})
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: material
})
}));
```
在上面的示例代码中,我们创建了一个多边形,并将自定义的着色器应用到多边形上。同时,我们还创建了一个椭球体,并将自定义的着色器应用到椭球体上。
这两种方法都可以实现拍平效果,具体选择哪一种方法取决于你的应用场景。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)