/** * 说明:检测菜单项是否已打开 */ function checkBtnActives(arr) { for (let i = 0; i < arr.length; i++) { let temp = arr[i]; if ($(temp).hasClass('active')) { $(temp).removeClass('active'); $(temp).find('.control-menu').removeClass('actives'); } } } /** * 说明:判断是否全屏 */ function checkFull() { var isFull = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement; //to fix : false || undefined == undefined if (isFull === undefined) isFull = false; return isFull; } /** * 说明:创建胶囊 */ function createBox() { if (box == null) { box = app.create({ type: 'Thing', url: 'https://model.3dmomoda.com/models/9CD08ED91F5C4E0ABB6B0833C86F2942/0/gltf/', position: [0, 0, 0], angle: 180, scale: [1.7, 1.7, 1.7], style: { color: '#FF0000' } }); } } /** * 说明:第一人称行走 */ function enterFps(pos) { if (fpsCtrl == null) { app.pauseEvent(THING.EventType.Pick, '*', THING.EventTag.LevelPickOperation); app.pauseEvent(THING.EventType.KeyUp, null, '空格键切换视角'); app.camera.position = pos; // 起始位置为鼠标点击时的位置 // 添加第一人称行走控件 fpsCtrl = app.addControl( new THING.WalkControl({ // 参数可以动态修改 walkSpeed: 0.02, // 行走速度 turnSpeed: 0.25, // 右键旋转速度 gravity: 26, // 物体重量 eyeHeight: 1.6, // 人高度 jumpSpeed: 10, // 按空格键 跳跃的速度 enableKeyRotate: false, // 默认不开启键盘控制旋转 useCollision: true, // 默认不开启碰撞检测 useGravity: true, // 默认开启重力 groundObjects: [app.scene], // 把整个场景都添加,可把楼层或其他需要检测的添加进入碰撞体系里 | 默认值 园区地板,如果园区过大,可取消提升性能 collisionObjects: [app.scene] // 把整个场景都添加,可把楼层或其他需要检测的添加进入碰撞体系里 | 默认值 园区地板,如果园区过大,可取消提升性能 }) ); } } /** * 说明:退出第一人称行走 */ function exitFps() { app.removeControl(fpsCtrl); fpsCtrl = null; cameraFly(cameraInitPos[0], cameraInitPos[1]); // 恢复默认双击事件 app.resumeEvent(THING.EventType.DBLClick, '*', THING.EventTag.LevelEnterOperation); // 恢复默认点击事件 app.resumeEvent(THING.EventType.Click, '*', THING.EventTag.LevelBackOperation); // 恢复默认拾取事件 app.resumeEvent(THING.EventType.Pick, '*', THING.EventTag.LevelPickOperation); // 恢复默认键盘键抬起事件 app.resumeEvent(THING.EventType.KeyUp, null, '空格键切换视角'); $('#moveByFps').removeClass('active'); } /** * 说明:开启小地图 */ function createMiniMap() { if (miniMapCtrl == null) { // 添加小地图控件 miniMapCtrl = app.addControl(new THING.MiniMapControl({ width: 200, height: 200, position: THING.CornerType.LeftBottom, opacity: 0.8, scale: 1, angle: 0, mousewheel: true, cameraViewImg: 'http://www.thingjs.com/static/images/minimap1.png', cameraCenterImg: 'http://www.thingjs.com/static/images/minimap0.png' })); $('.minimap').css('border', '1px solid rgba(255, 255, 255, 0.8)'); $('.minimap').css('left', '3px'); $('.minimap').css('bottom', '3px'); } else { destoryMiniMap(); createMiniMap(); } } /** * 说明:关闭小地图 */ function destoryMiniMap() { if (miniMapCtrl != null) { app.removeControl(miniMapCtrl); miniMapCtrl = null; } } /** * 说明:全屏显示 */ function fullScreen() { let el = document.documentElement; let rfs = el.requestFullScreen || el.webkitRequestFullScreen; if (typeof rfs != "undefined" && rfs) { rfs.call(el); } else if (typeof window.ActiveXObject != "undefined") { let wscript = new ActiveXObject("WScript.Shell"); if (wscript != null) { wscript.SendKeys("{F11}"); } } } /** * 说明:退出全屏 */ function exitFullScreen() { let el = document; let cfs = el.cancelFullScreen || el.webkitCancelFullScreen || el.exitFullScreen; if (typeof cfs != "undefined" && cfs) { cfs.call(el); } else if (typeof window.ActiveXObject != "undefined") { let wscript = new ActiveXObject("WScript.Shell"); if (wscript != null) { wscript.SendKeys("{F11}"); } } } /** * 说明:摄像机飞行 */ function cameraFly(position, target) { // 摄像机飞行到某位置 app.camera.flyTo({ 'position': position, 'target': target, 'time': 1000, 'complete': function () { } }); } /** * 说明:自动旋转 */ function startRotate() { app.camera.enableRotate = false; // 关闭默认的旋转操作 app.camera.enablePan = false; // 关闭默认的平移操作 app.camera.enableZoom = false; // 关闭默认的缩放操作 // 绕摄像机当前目标点旋转 app.camera.rotateAround({ target: app.camera.target, // 围绕摄像机当前目标点 // object: obj, // 环绕的物体 (object 与 target 的设置互斥) speed: 4, // 环绕飞行的时间(3min) yRotateAngle: 360, // 环绕y轴飞行的旋转角度 loopType: THING.LoopType.Repeat // 设置循环类型 }); } /** * 说明:停止自动旋转 */ function stopRotate() { app.camera.enableRotate = true; // 开启默认的旋转操作 app.camera.enablePan = true; // 开启默认的平移操作 app.camera.enableZoom = true; // 开启默认的缩放操作 app.camera.stopRotateAround(); if (rotateTimer) { clearTimeout(rotateTimer); rotateTimer = null; } } /** * 说明:重新开始转动,未进行任何操作5s后开始自动旋转 */ function restarRotate() { if (fpsCtrl != null || !$('#sceneSetting .control-menu-pane li.autoRotate').hasClass('selected')) { return; } if (rotateTimer == null) { rotateTimer = setTimeout(function () { // startRotate(); }, restartTime); } else { clearTimeout(rotateTimer); rotateTimer = null; restarRotate(); } }