Cesium添加水面

var viewer = new Cesium.Viewer('cesiumContainer');
var
waterPrimitive = new Cesium.Primitive({ //show:false,// 默认隐藏 allowPicking:false, geometryInstances : new Cesium.GeometryInstance({ geometry : new Cesium.PolygonGeometry({ polygonHierarchy : new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(waterFace)),//waterFace是一个组成多边形顶点数组[lon,lat,alt] //extrudedHeight: 0,//注释掉此属性可以只显示水面 perPositionHeight : true//注释掉此属性水面就贴地了 }) }), // 可以设置内置的水面shader appearance : new Cesium.EllipsoidSurfaceAppearance({ material : new Cesium.Material({ fabric : { type : 'Water', uniforms : { //baseWaterColor:new Cesium.Color(0.0, 0.0, 1.0, 0.5), //blendColor: new Cesium.Color(0.0, 0.0, 1.0, 0.5), //specularMap: 'gray.jpg', normalMap: 'waterNormals.jpg', frequency: 1000.0, animationSpeed: 0.01, amplitude: 10.0 } } }), fragmentShaderSource:'varying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec2 v_st;\nvoid main()\n{\nczm_materialInput materialInput;\nvec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\n#ifdef FACE_FORWARD\nnormalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\nmaterialInput.s = v_st.s;\nmaterialInput.st = v_st;\nmaterialInput.str = vec3(v_st, 0.0);\nmaterialInput.normalEC = normalEC;\nmaterialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\nvec3 positionToEyeEC = -v_positionEC;\nmaterialInput.positionToEyeEC = positionToEyeEC;\nczm_material material = czm_getMaterial(materialInput);\n#ifdef FLAT\ngl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\ngl_FragColor = czm_phong(normalize(positionToEyeEC), material);\ gl_FragColor.a=0.5;\n#endif\n}\n'//重写shader,修改水面的透明度 }) });
water
=viewer.scene.primitives.add(waterPrimitive);

 

posted @ 2018-05-15 10:32  酷熊  阅读(3217)  评论(0编辑  收藏  举报