顯示源代碼
                模擬飛行-外部視角
                 開發(fā)文檔
                            <!DOCTYPE html>
                <html>
                <head>
                    <meta charset='UTF-8'/>
                    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
                    <link  rel='stylesheet'/>
                    <script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
                    <style>
                        body {
                            margin: 0;
                            padding: 0;
                        }
                        #container {
                            position: absolute;
                            top: 0;
                            bottom: 0;
                            width: 100%;
                        }
                        .info{
                            position: fixed;
                            top:0;
                            color: #8a6d3b;
                            z-index: 99;
                            padding:14px;
                            margin: 0;
                            background-color: #fcf8e3;
                            border-color: #faebcc;
                            left: 0;
                            right: 0;
                            text-align: center;
                        }
                    </style>
                    <title>模擬飛行</title>
                </head>
                <body>
                <div class="info">
                    使用方向鍵控制飛行 “←” 向左飛行,“→”:向右飛行,“↑” 升高,“↓” 下降,若控制失效,請單擊本處獲得焦點
                </div>
                <div id='container'></div>
                <script>
                    bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
                    var viewer = new bmgl.Viewer('container', {
                        terrainId: 'bigemap.dc-terrain',
                        requestRenderMode:false,
                        mapId: 'bigemap.dc-satellite',
                        shouldAnimate:true,
                    });
                    viewer.scene.globe.depthTestAgainstTerrain=true;
                      viewer.screenSpaceEventHandler.removeInputAction(bmgl.ScreenSpaceEventType.LEFT_CLICK);
                      
                    var canvas = viewer.canvas;
                    canvas.setAttribute("tabindex", "0"); 
                    canvas.addEventListener("click", function () {
                        canvas.focus();
                    });
                    canvas.focus();
                    var config = {
                        init: {
                            lat: 30.950543,
                            lng: 103.0004609201,
                            height: 4000,
                        },
                        requireHeight:true,
                        angle:{
                            delta: 0.5,
                            left:0,
                            down:0,
                            r:0,
                            p:0,
                        },
                        position: {},
                        delta: 0.00003,
                    };
                    config.position = Object.assign({}, config.init);
                    viewer.scene.camera.setView({
                        destination: bmgl.Cartesian3.fromDegrees(config.init.lng, config.init.lat, config.init.height),
                        endTransform: bmgl.Matrix4.IDENTITY,
                    });
                    var plane = viewer.entities.add({
                        position: bmgl.Cartesian3.fromDegrees(config.init.lng, config.init.lat, config.init.height),
                        orientation: bmgl.Transforms.headingPitchRollQuaternion(bmgl.Cartesian3.fromDegrees(config.position.lng, config.position.lat, config.position.height), new bmgl.HeadingPitchRoll(config.angle.left-90, 0, 0)),
                        model: {
                            maximumScale: 2000,
                            minimumPixelSize: 300,
                            uri: '/templates/glb/bmgl_Air.glb',
                        }
                    });
                
                    function getHeight(){
                        config.requireHeight=false;
                        var promise=bmgl.sampleTerrainMostDetailed(viewer.terrainProvider,[bmgl.Cartographic.fromDegrees(config.position.lng,config.position.lat)]);
                        bmgl.when(promise,(data)=>{
                            if (data&&data[0]&&data[0]['height']&&data[0]['height']>0&&config.position.height<data['0']['height']+100){
                                if (!config.position.oldHeight) config.position.oldHeight=config.position.height;
                                config.position.height=data['0']['height']+100;
                            }
                            config.requireHeight=true;
                        }).otherwise(()=>{
                            config.requireHeight=true;
                        });
                    }
                  
                
                    viewer.trackedEntity = plane;
                    viewer.clock.onTick.addEventListener(function (e) {
                        getHeight();
                        config.position.lat += Math.cos(bmgl.Math.toRadians(config.angle.left))*config.delta;
                        config.position.lng += Math.sin(bmgl.Math.toRadians(config.angle.left))*config.delta;
                        if (config.angle.p&&!config.keydown){
                            config.angle.p>0?config.angle.p-=config.angle.delta:config.angle.p+=config.angle.delta;
                        }
                        if (config.angle.r&&!config.keydown){
                            config.angle.r>0?config.angle.r-=config.angle.delta:config.angle.r+=config.angle.delta;
                        }
                        plane.position = bmgl.Cartesian3.fromDegrees(config.position.lng, config.position.lat, config.position.height);
                        plane.orientation=bmgl.Transforms.headingPitchRollQuaternion(bmgl.Cartesian3.fromDegrees(config.position.lng, config.position.lat, config.position.height), new bmgl.HeadingPitchRoll.fromDegrees(config.angle.left-90, config.angle.p,config.angle.r));
                    });
                
                    document.addEventListener('keydown', function (e) {
                        config.keydown=true;
                        switch (e.keyCode) {
                            case 37://左
                                config.angle.left-=1;
                                if (config.angle.r>-30)  config.angle.r-=config.angle.delta;
                                break;
                            case 38://向上
                                config.position.height+=10;
                                if (config.angle.p<30)  config.angle.p+=config.angle.delta;
                                break;
                            case 39://向右
                                if (config.angle.r<30)  config.angle.r+=config.angle.delta;
                                config.angle.left+=1;
                                break;
                            case 40://向下
                                config.position.height-=10;
                                if (config.angle.p>-30)  config.angle.p-=config.angle.delta;
                                if (config.position.height<10) config.position.height=10;
                                break;
                        }
                    });
                    document.addEventListener('keyup',()=>{
                        config.keydown=false;
                    });
                </script>
                </body>
                </html>
                                                                                                                                                                                                                                                                                                                                                                                                                                    
                主站蜘蛛池模板: 免费国产美女爽到喷出水来视频| 国产精品自在线观看剧情| 亚洲AV午夜成人片| 百合潮湿的欲望| 国产性生大片免费观看性| 99久久人妻无码精品系列| 日日婷婷夜日日天干| 亚洲人成网站在线观看播放| 福利深夜小视频秒拍微拍| 国产区香蕉精品系列在线观看不卡| 91华人在线视频| 少妇一晚三次一区二区三区| 久久精品国产免费| 欧美日韩国产另类一区二区三区| 十六以下岁女子毛片免费| 香蕉久久夜色精品国产尤物| 国产精品电影久久久久电影网| 一区二区三区免费视频播放器 | 亚洲va欧美va| 男女一进一出无遮挡黄| 日本视频免费观看| 亚洲日本视频在线观看| 精品亚洲欧美无人区乱码| 国产午夜亚洲精品不卡免下载| 三级网站免费观看| 大尺度视频网站久久久久久久久| 中文字幕乱伦视频| 日本黄色片下载| 亚洲一区二区观看播放| 永久免费a∨片在线观看| 全免费一级午夜毛片| 久久99精品国产99久久6男男| 欧美性受xxxx狂喷水| 从镜子里看我怎么c你| 羞羞网站免费观看| 国模gogo中国人体私拍视频| 中国高清色视频www| 日韩一本二本三本的区别青| 亚洲国产成人久久一区二区三区| 特级毛片A级毛片100免费播放 | 国产成人涩涩涩视频在线观看|