zhanmingkan
2022-05-14 0fc43fe898d14895c97427801293edfb3a0c5bf1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//绘制水面效果
 
function drawWater() {
    // this.viewer.scene.globe.depthTestAgainstTerrain = true;
    var waterFace = [
        110.15,34.56, 0,
        110.25, 34.56, 0,
        110.25, 34.54, 0,
        110.15, 34.54, 0];
    var waterPrimitive = new Cesium.Primitive({
        show: true,// 默认隐藏
        allowPicking: false,
        geometryInstances: new Cesium.GeometryInstance({
            geometry: new Cesium.PolygonGeometry({
                polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(waterFace)),
                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: '../assets/waterNormals.jpg',
                        normalMap: '../assets/images/media/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,修改水面的透明度
        })
    });
    this.viewer.scene.primitives.add(waterPrimitive);
 
    this.viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(110.2, 34.55, 6000.0),
        orientation: {
            heading: Cesium.Math.toRadians(0.0), //默认朝北0度,顺时针方向,东是90度
            pitch: Cesium.Math.toRadians(-90), //默认朝下看-90,0为水平看,
            roll: Cesium.Math.toRadians(0) //默认0
        }
    });
 
    CesiumFlood.create(viewer,true,1100,500,1,true);
    CesiumFlood.start();
}
 
function sub_analysis_draw(){
    var options = {
        'viewer':viewer,
        'polygoncolor': Cesium.Color.SALMON.withAlpha(0.5), //面的颜色(可设置透明度)
        'pointcolor': Cesium.Color.RED,  //画面时圈点的颜色
    }
    CesiumFlood.drawFloodDraw(options);
}
 
function sub_analysis_drawClear(){
    var options = {
        'viewer': viewer, //全局Cesium对象
    };
    CesiumFlood.floodDrawClean(options);
}
 
function sub_analysis_start(max,min,speed){
    // CesiumFlood.polygon_degrees = CesiumDraw.polygonPoints;
    CesiumFlood.create(viewer,true,max,min,speed,true);
    CesiumFlood.start();
}
 
function sub_analysis_stop(){
    CesiumFlood.speed = 0;
}
function sub_analysis_clear(){
    CesiumFlood.remove();
}