cesium 水面倒影代码
时间: 2023-09-04 18:15:07 浏览: 225
下面是一个使用Cesium创建水面倒影的示例代码:
```javascript
// 创建场景
var viewer = new Cesium.Viewer('cesiumContainer');
// 创建水面
var waterPrimitive = new Cesium.Primitive({
geometryInstances : new Cesium.GeometryInstance({
geometry : new Cesium.PlaneGeometry({
vertexFormat : Cesium.VertexFormat.POSITION_ONLY
})
}),
appearance : new Cesium.MaterialAppearance({
material : new Cesium.Material({
fabric : {
type: 'Water',
uniforms: {
specularMap: '/textures/waterSpecular.png',
normalMap: '/textures/waterNormal.png',
frequency: 10000.0,
animationSpeed: 0.01,
amplitude: 10.0
}
}
})
})
});
// 将水面添加到场景中
viewer.scene.primitives.add(waterPrimitive);
// 设置相机高度
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(139.767052, 35.681167, 5000.0)
});
// 创建水面倒影
var reflectionPrimitive = new Cesium.Primitive({
geometryInstances : new Cesium.GeometryInstance({
geometry : new Cesium.PlaneGeometry({
vertexFormat : Cesium.VertexFormat.POSITION_ONLY
}),
modelMatrix : Cesium.Matrix4.multiplyByTranslation(
Cesium.Transforms.eastNorthUpToFixedFrame(
viewer.camera.positionWC,
viewer.scene.globe.ellipsoid.cartesianToCartographic(viewer.camera.positionWC)
),
new Cesium.Cartesian3(0.0, 0.0, -1.0),
new Cesium.Matrix4()
)
}),
appearance : new Cesium.MaterialAppearance({
material : new Cesium.Material({
fabric : {
type: 'Water',
uniforms: {
specularMap: '/textures/waterSpecular.png',
normalMap: '/textures/waterNormal.png',
frequency: 10000.0,
animationSpeed: 0.01,
amplitude: 10.0
}
}
})
})
});
// 将水面倒影添加到场景中
viewer.scene.primitives.add(reflectionPrimitive);
```
该代码使用Cesium创建了一个水面和水面的倒影,并将它们添加到场景中。水面和倒影使用了相同的材质,通过设置不同的模型矩阵实现倒影效果。在材质中,使用了一张镜面贴图和一张法线贴图来模拟水面的反射和波纹效果。
阅读全文