顯示源代碼
                蒙版遮罩
                 開發文檔
                            <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset="UTF-8" />
                        <meta
                            name="viewport"
                            content="initial-scale=1,maximum-scale=1,user-scalable=no"
                        />
                        <link
                            href="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/Widgets/widgets.css"
                            rel="stylesheet"
                        />
                        <script src="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js"></script>
                        <script src="/bmgl/mbzz/lines.js"></script>
                        <style>
                            body {
                                margin: 0;
                                padding: 0;
                            }
                            #container {
                                position: absolute;
                                top: 0;
                                bottom: 0;
                                width: 100%;
                            }
                            .bmgl-widget-credits {
                                display: none;
                            }
                            .mask {
                                position: absolute;
                                left: 0;
                                top: 0;
                                z-index: 999;
                                width: 100%;
                                height: 100%;
                                pointer-events: none;
                                background-image: radial-gradient(
                                    rgba(139, 138, 138, 0.12) 20%,
                                    rgba(65, 57, 57, 0.56) 50%,
                                    rgb(17, 16, 16) 80%
                                );
                            }
                        </style>
                        <title>蒙版遮罩效果</title>
                    </head>
                    <body>
                        <div id="container"></div>
                        <script>
                            bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
                            window.viewer = new bmgl.Viewer("container", {
                                mapId: "bigemap.9mviocu1",
                                requestRenderMode: false,
                            });
                            if (bmgl.FeatureDetection.supportsImageRenderingPixelated()) {
                                viewer.resolutionScale = window.devicePixelRatio;
                            }
                            //開啟抗鋸齒,讓圖像更加順滑
                            viewer.scene.postProcessStages.fxaa.enabled = true;
                            //不啟用地形遮擋
                            function loadTiles() {
                                viewer.scene.globe.depthTestAgainstTerrain = false;
                                window.tilesets = new bmgl.BM3DTileset({
                                    url: "/bmgl/mbzz/qybuildings/tileset.json",
                                    skipLevelOfDetail: true,
                                    baseScreenSpaceError: 1024,
                                    skipScreenSpaceErrorFactor: 16,
                                    skipLevels: 1,
                                    immediatelyLoadDesiredLevelOfDetail: false,
                                    loadSiblings: false,
                                    cullWithChildrenBounds: true,
                                    maximumScreenSpaceError: 64,
                                });
                                tilesets.readyPromise
                                    .then(function (tileset) {
                                        viewer.scene.primitives.add(tileset);
                                        let default_HeadingPitchRange =
                                            new bmgl.HeadingPitchRange(
                                                0.0,
                                                -0.5,
                                                tileset.boundingSphere.radius * 2.0
                                            );
                                        // viewer.zoomTo(tileset, default_HeadingPitchRange);
                                        let cartographic = bmgl.Cartographic.fromCartesian(
                                            tileset.boundingSphere.center
                                        );
                                        let delta_lng = 0,
                                            delta_lat = 0;
                                        let surface = bmgl.Cartesian3.fromRadians(
                                            cartographic.longitude + delta_lng,
                                            cartographic.latitude + delta_lat,
                                            0.0
                                        );
                                        let offset = bmgl.Cartesian3.fromRadians(
                                            cartographic.longitude + delta_lng,
                                            cartographic.latitude + delta_lat,
                                            0.0
                                        );
                                        let translation = bmgl.Cartesian3.subtract(
                                            offset,
                                            surface,
                                            new bmgl.Cartesian3()
                                        );
                                        tileset.modelMatrix =
                                            bmgl.Matrix4.fromTranslation(translation);
                                    })
                                    .otherwise(function (error) {
                                        console.log(error);
                                    });
                                //設置鏡頭位置
                                window.viewer.camera.setView({
                                    destination: bmgl.Cartesian3.fromDegrees(
                                        104.03198897257145,
                                        30.665611848359656,
                                        1078.4231345299547
                                    ),
                                    orientation: {
                                        heading: 5.109994884271855,
                                        pitch: -0.3567556211122831,
                                        roll: 0.00014017863173787504,
                                    },
                                });
                            }
                            // 調整白膜樣式
                            function setShader(tilesets) {
                                tilesets.style = new bmgl.BM3DTileStyle({
                                    color: {
                                        conditions: [["true", "rgba(27, 154, 247,1)"]],
                                    },
                                });
                
                                tilesets.tileVisible.addEventListener(function (tile) {
                                    let content = tile.content;
                                    let featuresLength = content.featuresLength;
                                    let feature;
                                    for (var i = 0; i < featuresLength; i += 2) {
                                        feature = content.getFeature(i);
                                        let _model = feature.content._model;
                                        _model._shouldRegenerateShaders = true;
                                        // getOwnPropertyNames:返回指定對象的所有自身屬性的屬性名組成的數組
                                        // forEach:對數組里的所有元素都執行一遍
                                        // Object.keys:返回
                                        Object.getOwnPropertyNames(
                                            _model._sourcePrograms
                                        ).forEach(function (j) {
                                            const _modelSourceP = _model._sourcePrograms[0];
                                            _model._rendererResources.sourceShaders[
                                                _modelSourceP.fragmentShader
                                            ] = `
                                                    varying vec3 v_positionEC;
                                                    void main(void){
                                                    vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
                                                    float glowRange = 40.0; // 光環的移動范圍(高度)
                                                    gl_FragColor = vec4(0.0, 0.3, 0.8, 0.8); // 顏色
                                                    // gl_FragColor = vec4(0.2,0.6,0.4,0.2); // 顏色
                
                                                    // 小于20米的低樓都不再變暗
                                                    // if(position.y > 0.0) {
                                                    if(position.y > 1.0) {
                                                        gl_FragColor *= vec4(vec3(position.y / 20.0), 0.8); // 漸變
                                                    }
                
                                                    // 動態光環
                                                    float time = fract(czm_frameNumber / 360.0);
                                                    time = abs(time - 0.5) * 3.0;
                                                    float diff = step(0.005, abs( clamp(position.y / glowRange, 0.0, 1.0) - time));
                                                    gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diff);
                                                    }
                                                `;
                                        });
                                        _model._shouldRegenerateShaders = true;
                                    }
                                });
                            }
                            // 加載流動線
                            const loadRoadLinesNew = async () => {
                                const appearance = new bmgl.PolylineMaterialAppearance({
                                    material: new bmgl.Material({
                                        fabric: {
                                            uniforms: {
                                                // 設置線條的材質顏色
                                                u_color:
                                                    bmgl.Color.fromCssColorString("#003eff"),
                                                // 設置運動的速度
                                                u_speed: 300,
                                            },
                                            source: `
                                        uniform vec4 u_color;
                                        uniform float u_speed;
                                        uniform float u_glow;
                                        czm_material czm_getMaterial(czm_materialInput materialInput){
                                            czm_material material = czm_getDefaultMaterial(materialInput);
                                            vec2 st = materialInput.st;
                                            float t =fract(czm_frameNumber / u_speed);
                                            t *= 1.03;
                                            float alpha = smoothstep(t- 0.03, t, st.s) * step(-t, -st.s);
                                            alpha += 0.1;
                                            vec4 fragColor;
                                            fragColor.rgb = (u_color.rgb) / 0.5;
                                            fragColor = czm_gammaCorrect(fragColor);
                                            material.diffuse = fragColor.rgb;
                                            material.alpha = alpha;
                                            material.emission = fragColor.rgb * 1.5;
                                            return material;
                                        }
                                    `,
                                        },
                                    }),
                                });
                                const instances = [];
                                const promise = bmgl.GeoJsonDataSource.load(
                                     "/bmgl/mbzz/qy_mainroad.geojson"
                                );
                                promise.then((dataSource) => {
                                    const entities = dataSource.entities.values;
                                    for (let i = 0; i < entities.length; i++) {
                                        const entity = entities[i];
                                        const instance = new bmgl.GeometryInstance({
                                            geometry: new bmgl.PolylineGeometry({
                                                positions: entity.polyline.positions.getValue(),
                                                width: 3,
                                            }),
                                        });
                                        instances.push(instance);
                                    }
                                    let road = new bmgl.Primitive({
                                        geometryInstances: instances,
                                        appearance: appearance,
                                        asynchronous: false,
                                    });
                                    viewer.scene.primitives.add(road);
                                });
                            };
                
                            loadTiles();
                            setShader(window.tilesets);
                
                            loadRoadLinesNew();
                        </script>
                    </body>
                </html>
                        
                主站蜘蛛池模板: 色综合色综合久久综合频道| 人人澡人人妻人人爽人人蜜桃麻豆| 中文字幕在线成人免费看| 正能量www正能量免费网站 | 波多野结衣女女互慰| 国产三级在线观看播放| 2022国产精品手机在线观看| 岛国免费在线观看| 亚洲精品字幕在线观看| 被农民工玩的校花雯雯| 成人亚洲欧美日韩中文字幕| 亚洲精品美女视频| 色天天天综合色天天碰| 国产砖码砖专区| 中文字幕在线免费看线人| 欧美乱色理伦片| 你懂的网址免费国产| 色欲AV无码一区二区三区| 国产精品三级av及在线观看| A级国产乱理论片在线观看| 扒下胸罩揉她的乳尖调教| 九九在线中文字幕无码| 欧美肥妇毛多水多bbxx水蜜桃| 免费观看成人羞羞视频软件| 夜夜未满18勿进的爽影院| 日本欧美大码aⅴ在线播放| 亚洲日本一区二区一本一道| 粗大猛烈进出高潮视频大全| 国产精品成人无码久久久| 一个男的操一个女的| 日本三浦理惠子中文字幕| 亚洲一区二区三区91| 激情三级hd中文字幕| 国产妇女馒头高清泬20P多毛| 91精品国产综合久久久久久 | 免费h片在线观看网址最新| 老师吸大胸校花的奶水漫画| 国产韩国精品一区二区三区| 一女被两男吃奶玩乳尖| 日本www在线播放| 久久综合九色欧美综合狠狠 |