{"ast":null,"code":"import \"core-js/modules/es.array.push.js\";\n//import { FBXLoader } from \"./FBXLoader.js\";\n//import { GLTFLoader } from \"three/addons/loaders/GLTFLoader.js\";\n//import { MeshBasicMaterial, MeshStandardMaterial, Vector3 } from \"three\";\nimport Vue from \"vue\";\nimport fetchAndCombine from \"../public/loader/loader\";\nimport { UWB } from \"../public/plugin/uwb/index.js\";\nimport { FXAAShader } from \"../public/shader/FAAXShader.js\";\nimport '../public/libs/tools.js';\n\n// 定义一个函数,接受元素ID和一个回调函数作为参数,用于处理点击事件\nwindow.waterMap = {};\nwindow.sdkInstance = null;\nwindow.uwbInstance = null;\nwindow.getsqlData = getsqlData;\nwindow.modeChangeInterval = null;\nwindow.benchListInterval = null;\nwindow.otherInterval = null;\nvar fbxLoader1Loaded = false;\nvar fbxLoader2Loaded = false;\nlet textureLoader = new THREE.TextureLoader();\nlet textureReady = textureLoader.load('../images/location_ready.png');\nlet textureRunning = textureLoader.load('../images/location_running.png');\nlet textureOffline = textureLoader.load('../images/location_offline.png');\nwindow.benchMeshMap = {};\nwindow.benchMeshWaterMap = {};\nwindow.benchDBList = null;\nfunction getsqlData(sdkInstance, uwbInstance, bAddModel) {\n let g_PosArrayResult = null;\n if (g_PosArrayResult == null) {\n var sqlstr = \"SELECT * FROM dat_bench_extend order by bench_id asc\";\n\n //sqlstr = sqlstr.format(two_seconds_ago, two_seconds_ago)\n console.log(sqlstr);\n let msg = {\n cmd: \"query\",\n // server端要进行判断的\n data: {\n name: \"name\",\n // 这个无所谓怎么写,有就行\n //sql: 'select * from his_location_tadiao_result_unity limit 300'\n sql: sqlstr\n }\n };\n // 触发事件进行从服务器获取数据\n window.vm.$socket.emit(\"REPT\", msg, datas => {\n g_PosArrayResult = datas.data;\n window.benchDBList = datas.data;\n var now = new Date();\n var two_seconds_ago = new Date(now.getTime() - 2 * 1000).Format(\"yyyy-MM-dd hh:mm:ss.S\");\n var one_second_ago = new Date(now.getTime() - 1 * 1000).Format(\"yyyy-MM-dd hh:mm:ss.S\");\n {\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type;\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n } else {}\n var distance = 10000.0;\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2));\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let show_remote_button = item.show_remote_button;\n // 添加水滴\n let benchList = window.store ? window.store.getters['benchList/getBenchList'] : [];\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n let currentBench = benchList.find(b => b.id == bench_id);\n let texture = null;\n if (currentBench) {\n switch (currentBench.status) {\n case \"ready\":\n texture = textureReady;\n break;\n case \"running\":\n texture = textureRunning;\n break;\n case \"offline\":\n texture = textureOffline;\n break;\n default:\n texture = textureOffline;\n break;\n }\n } else {\n texture = textureOffline;\n }\n if (window.waterMap[bench_id]) {\n sdkInstance.sceneRenderer.scene.remove(window.waterMap[bench_id]);\n }\n\n // 创建精灵对象\n const geometry = new THREE.PlaneGeometry(1.2, 1.2);\n let spriteMaterial = new THREE.SpriteMaterial({\n map: texture\n });\n let uniformsA = {\n amplitude: {\n value: 1.0\n },\n color: {\n value: new THREE.Color(0xff2200)\n },\n texture: {\n value: texture\n }\n };\n // 创建着色器材质\n const shaderMaterial = new THREE.ShaderMaterial({\n uniforms: uniformsA,\n vertexShader: `varying vec2 vUv;\n uniform sampler2D texture;\n void main() {\n vUv = uv;\n vec4 t = texture2D( texture, vUv );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position.x,position.y,position.z+t.g, 1.0 );\n }`,\n fragmentShader: `varying vec2 vUv;\n uniform sampler2D texture;\n void main() {\n gl_FragColor = texture2D( texture, vUv );\n }`,\n side: THREE.DoubleSide,\n transparent: true\n });\n let sprite = new THREE.Sprite(spriteMaterial);\n const mesh = new THREE.Mesh(geometry, shaderMaterial);\n var customData = {\n benchId: bench_id,\n benchFlag: false,\n bShowRemoteButton: false,\n type: 'water'\n };\n mesh.userData = customData;\n // sprite.scale.set(100, 100, 1);\n mesh.position.set(x, y + 10, z);\n mesh.rotation.set(-Math.PI / 2, 0, 0);\n window.waterMap[bench_id] = mesh;\n console.log('添加模型和水滴1111', benchIdList);\n if (sdkInstance) {\n if (benchIdList.indexOf(Number(bench_id)) > 0) {\n if (bAddModel && window.benchMeshWaterMap[bench_id]) {\n window.benchMeshWaterMap[bench_id] = mesh;\n console.log('添加benchid', bench_id);\n sdkInstance.sceneRenderer.scene.add(mesh);\n } else {\n window.benchMeshWaterMap[bench_id] = mesh;\n }\n }\n }\n }\n ;\n }\n let dracoLoader = new THREE.DRACOLoader();\n THREE.DRACOLoader.setDecoderPath(\"../gltf/\");\n var fbxLoader1 = new THREE.GLTFLoader();\n fbxLoader1.setDRACOLoader(dracoLoader);\n if (!fbxLoader1Loaded) {\n fbxLoader1.load(\"../models/meshDraco.gltf\", function (fbx) {\n console.log('loadzmg');\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n //fbxLoader1Loaded = true;\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type;\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n } else {}\n var distance = 10000.0;\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2));\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let bench_img = item.bench_img;\n let show_remote_button = item.show_remote_button;\n if (benchType == 1) {\n console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n var childMesh = fbx.scene.children[0].children[0];\n let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material);\n let scale = 5;\n childMeshTmp.scale.set(scale, scale, scale);\n //fbx.scene.children[0].scale.set(5, 5, 5)\n //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)\n childMeshTmp.position.set(x, y, z);\n var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);\n //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);\n var quaternion = new THREE.Quaternion();\n childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler));\n var customData = {\n benchId: bench_id,\n benchFlag: true,\n bShowRemoteButton: show_remote_button == 1 ? true : false,\n benchImg: bench_img\n };\n childMeshTmp.userData = customData;\n console.log('添加模型和水滴1111');\n if (benchIdList.indexOf(Number(bench_id)) > 0) {\n if (bAddModel && window.benchMeshMap[bench_id]) {\n window.benchMeshMap[bench_id] = childMeshTmp;\n sdkInstance.sceneRenderer.scene.add(childMeshTmp);\n } else {\n window.benchMeshMap[bench_id] = childMeshTmp;\n }\n }\n }\n }\n ;\n });\n }\n var fbxLoader2 = new THREE.GLTFLoader();\n fbxLoader2.setDRACOLoader(dracoLoader);\n if (!fbxLoader2Loaded) {\n fbxLoader2.load(\"../models/mesh2Draco.gltf\", function (fbx) {\n //fbxLoader2Loaded = true;\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type;\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n } else {}\n var distance = 10000.0;\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2));\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let show_remote_button = item.show_remote_button;\n let bench_img = item.bench_img;\n if (benchType == 2) {\n console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n var childMesh = fbx.scene.children[0];\n let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material);\n let scale = 0.05;\n childMeshTmp.scale.set(scale, scale, scale);\n //fbx.scene.children[0].scale.set(5, 5, 5)\n //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)\n childMeshTmp.position.set(x, y, z);\n var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);\n //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);\n var quaternion = new THREE.Quaternion();\n childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler));\n var customData = {\n benchId: bench_id,\n benchFlag: true,\n bShowRemoteButton: show_remote_button == 1 ? true : false,\n benchImg: bench_img\n };\n childMeshTmp.userData = customData;\n if (bAddModel && window.benchMeshMap[bench_id]) {\n window.benchMeshMap[bench_id] = childMeshTmp;\n sdkInstance.sceneRenderer.scene.add(childMeshTmp);\n } else {\n window.benchMeshMap[bench_id] = childMeshTmp;\n }\n }\n }\n ;\n if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {\n if (!window.otherInterval) {\n window.otherInterval = setInterval(() => {\n if (window.uwbInstance) {\n clearInterval(window.otherInterval);\n var benchPosList = [];\n for (var item of result) {\n var localPosition = new THREE.Vector3(item.fix_pos_x, item.fix_pos_y, item.fix_pos_z);\n var worldPosition = window.uwbInstance.convertLocalToWorld(localPosition);\n var pos = window.sdkInstance.getScreenPosition(worldPosition);\n benchPosList.push({\n x: pos.x,\n y: pos.y,\n benchType: item.bench_type,\n benchId: item.bench_id,\n benchImg: item.bench_img\n });\n }\n console.log('benchPosList', benchPosList);\n window.showBenchPos(benchPosList);\n setInterval(() => {\n getsqlDataRealTime();\n }, 30 * 1000);\n }\n }, 2 * 1000);\n }\n }\n });\n }\n });\n }\n}\nfunction getsqlDataRealTime() {\n if (true) {\n var sqlstr = \"select t3.* ,t4.fix_pos_x, t4.fix_pos_y, t4.fix_pos_z,t4.fix_angle_x, t4.fix_angle_y, t4.fix_angle_z, t4.bench_type, t4.bench_id, t4.bench_img, t4.use_fix_pos from (SELECT t1.* FROM his_location_tadiao_result_unity t1 INNER JOIN (SELECT MAX(loc_time) AS max_loc_time FROM his_location_tadiao_result_unity GROUP BY card_id) t2 ON t1.loc_time = t2.max_loc_time) as t3 INNER JOIN dat_bench_extend t4 ON (t4.card_id=t3.card_id)\";\n\n //sqlstr = sqlstr.format(two_seconds_ago, two_seconds_ago)\n console.log(sqlstr);\n let msg = {\n cmd: \"query\",\n // server端要进行判断的\n data: {\n name: \"name\",\n // 这个无所谓怎么写,有就行\n //sql: 'select * from his_location_tadiao_result_unity limit 300'\n sql: sqlstr\n }\n };\n // 触发事件进行从服务器获取数据\n window.vm.$socket.emit(\"REPT\", msg, datas => {\n let result = datas.data;\n var benchPosList = [];\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type;\n if (item.use_fix_pos == 1) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n } else if (item.use_fix_pos == 2) {\n var distance = 10000.0;\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n x = x - 14.7;\n z = y - 14;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n if (window.benchDBList) {\n var iCount = 0;\n for (var itemSub of window.benchDBList) {\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(z - zSub, 2));\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n }\n if (window.benchMeshMap[item.bench_id] && window.benchMeshWaterMap[item.bench_id]) {\n window.benchMeshMap[item.bench_id].position.set(x, y, z);\n window.benchMeshWaterMap[item.bench_id].position.set(x, y + 10, z);\n if (item.use_fix_pos == 0) {\n window.benchMeshMap[item.bench_id].position.set(x - 14.7, JSON.parse(JSON.stringify(item.fix_pos_y)), y - 14);\n window.benchMeshWaterMap[item.bench_id].position.set(x - 14.7, JSON.parse(JSON.stringify(item.fix_pos_y)) + 10, y - 14);\n }\n //var localPosition = new THREE.Vector3(x, y, z);\n var worldPosition = window.uwbInstance.convertLocalToWorld(window.benchMeshMap[item.bench_id].position);\n var pos = window.sdkInstance.getScreenPosition(worldPosition);\n benchPosList.push({\n x: pos.x,\n y: pos.y,\n benchType: item.bench_type,\n benchId: item.bench_id,\n benchImg: item.bench_img\n });\n }\n }\n console.log('benchPosList', benchPosList);\n window.showBenchPos(benchPosList);\n });\n }\n}\n\n// uwb 插件初始化\nfunction uwbInit(originPointPose) {\n console.log(\"=====初始化uwb 实例=====\");\n const uwbIns = new UWB({\n upAxis: \"y-up\",\n LR: \"r\",\n worldPose: originPointPose\n });\n return uwbIns;\n}\nexport function uwbMain(domId, modelWidth, modelHeight, finalMode, callback) {\n console.log(\"uwbMain enter\");\n finalMode = finalMode || \"floorplan\";\n var radius = 0.3;\n var height = 0.5;\n var segments = 4;\n var color = 0x00ff00;\n let g_gltf_downloaded = false;\n let composer = null;\n let box = null;\n let sqlQueryInited = false;\n let g_fbx = null;\n let g_fbxLoader = null;\n let sdkInstance = null;\n window.renderHeight = modelHeight;\n window.renderWidth = modelWidth;\n var geometry = new THREE.ConeGeometry(radius, height, segments);\n var material1 = new THREE.MeshBasicMaterial({\n color: color,\n opacity: 0.2,\n transparent: true\n });\n fetchAndCombine().then(([err, data]) => {\n if (err) {\n console.error(err);\n console.log(\"模型加载出错\");\n } else {\n let HousePlay = HOUSEPLAY.HousePlay;\n let playerContainer = document.getElementById(domId);\n data.container = playerContainer;\n sdkInstance = new HousePlay(data);\n window.sdkInstance = sdkInstance;\n sdkInstance.start();\n let vrBgContainer = document.getElementById(\"vr-bg-container\");\n vrBgContainer.style.width = modelWidth + 'px';\n vrBgContainer.style.height = modelHeight + 'px';\n vrBgContainer.style.backgroundColor = 'transparent';\n window.sdkInstance.emit(\"endLoading\", finalMode);\n window.sdkInstance.emit(\"modeChange\", null, finalMode);\n if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {\n setTimeout(() => {\n var element = document.getElementById('house-player');\n var container = document.getElementById(\"ordinary-map\");\n container.style.opacity = 1;\n let mapDom = document.getElementsByClassName(\"ordinary-map-container\")[0];\n let style = getComputedStyle(mapDom);\n let width = parseFloat(style.width);\n let height = parseFloat(style.height);\n let ratio = 1.8;\n window.renderWidth = width * ratio;\n window.renderHeight = height * ratio;\n window.sdkInstance.sceneRenderer.updateScreenSize(width * ratio, height * ratio);\n element.style.marginLeft = (width - width * ratio) / 2 + 'px';\n element.style.marginTop = (height - height * ratio) / 2 + 'px';\n let playersmall = document.getElementById('playersmall');\n playersmall.appendChild(element);\n modeChangeInterval = setInterval(() => {\n if (window.sdkInstance.player.controls) {\n clearInterval(modeChangeInterval);\n window.sdkInstance.changeMode('floorplan');\n sdkInstance.player.cameras.floorplan.position.setY(10);\n }\n }, 500);\n }, 1500);\n }\n sdkInstance.on(\"endLoading\", mode => {\n console.log(mode, '-----+++++-----');\n console.log('endLoading');\n vrBgContainer.style.display = \"none\";\n\n // 本地坐标系原点位姿\n const originPointPose = {\n worldPosition: {\n x: 0,\n y: 0,\n z: 0\n },\n worldQuaternion: {\n x: 0,\n y: 0,\n z: 0,\n w: 1\n }\n };\n\n //初始化uwb插件\n let uwbInstance = uwbInit(originPointPose);\n window.uwbInstance = uwbInstance;\n if (g_gltf_downloaded == false) {\n let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n pointLight.position.set(200, 200, 200); //设置点光源位置\n sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n g_gltf_downloaded = true;\n }\n let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n pointLight.position.set(200, 200, 200); //设置点光源位置\n sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n\n if (g_fbxLoader == null) {\n g_fbxLoader = new THREE.GLTFLoader();\n // g_fbxLoader.load(\"../models/mesh2.gltf\", function (fbx) {\n // let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n // sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n // let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n // pointLight.position.set(200, 200, 200); //设置点光源位置\n // sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n // g_fbx = fbx;\n // console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n // //fbx.scene.children[0].children[0].scale.set(5, 5, 5)\n // //window.shader = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);\n // //window.shader1 = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);\n // });\n // if (false) {\n // sqlQueryInited = true;\n // var index = 0;\n // setTimeout(\n // function (card_id, x, y, z) {\n // \n // },\n // 500\n // );\n // }\n benchListInterval = setInterval(() => {\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n if (benchIdList.length > 0) {\n clearInterval(benchListInterval);\n getsqlData(sdkInstance, uwbInstance, false);\n }\n }, 500);\n }\n\n // 创建物体add\n // 模型加载完成,进入模型页面,添加摆放的物体\n let canvas = document.getElementsByTagName('canvas')[0];\n canvas.style.borderRadius = \"0px\";\n canvas.onmousedown = event => {\n let mouse = new THREE.Vector2();\n let raycaster = new THREE.Raycaster();\n mouse.x = event.clientX / window.innerWidth * 2 - 1;\n mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;\n raycaster.setFromCamera(mouse, sdkInstance.player.camera);\n let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);\n if (intersects && intersects.length > 0) {\n let bFirst = true;\n let bool = false;\n let bool1 = false;\n intersects.forEach(m => {\n console.log('点击水滴', event, m && m.object && m.object.geometry && m.object.geometry.type, m.object);\n if (m.object.geometry.type != \"PlaneBufferGeometry\") {\n console.log('onmousedown', 111);\n if (m.object.userData && m.object.userData.benchFlag == true) {\n if (!bool) {\n bool = true;\n //m.object.material = window.shader1;\n ////m.object.scale.set(10, 10, 10)\n //m.object.scale.set(5, 5, 5)\n //outlineObj(m.object)\n // let player = document.getElementById(domId)\n // player.style.display = \"none\n if (box) {\n sdkInstance.sceneRenderer.scene.remove(box);\n }\n window.handleBenchClick(m.object.userData.benchId, m.object.userData.bShowRemoteButton);\n box = new THREE.BoxHelper(m.object, '#ff0000'); //object 模型\n sdkInstance.sceneRenderer.scene.add(box);\n //let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n //sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n //let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n //pointLight.position.set(200, 200, 200); //设置点光源位置\n //sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n }\n //outlineObj(m.object\n //m.object.material = FXAAShader\n }\n } else if (m.object.geometry.type == \"PlaneBufferGeometry\") {\n console.log('onmousedown', 222);\n if (m.object.userData && m.object.userData.benchFlag == true) {\n window.handleListClick(m.object.userData.benchId);\n }\n }\n });\n bool = false;\n bool1 = false;\n }\n };\n canvas.onmousemove = event => {\n let mouse = new THREE.Vector2();\n let raycaster = new THREE.Raycaster();\n let housePlayer = document.getElementById('house-player');\n let marginLeft = 0;\n let marginTop = 0;\n if (housePlayer) {\n let mapDom = document.getElementsByClassName(\"ordinary-map-container\")[0];\n let style = getComputedStyle(mapDom);\n let width = parseFloat(style.width);\n let height = parseFloat(style.height);\n marginLeft = (width - width * 1.8) / 2;\n marginTop = (height - height * 1.8) / 2;\n mouse.x = (event.clientX + Math.abs(marginLeft)) / parseFloat(housePlayer.style.width) * 2 - 1;\n mouse.y = -((event.clientY + Math.abs(marginTop)) / parseFloat(housePlayer.style.height)) * 2 + 1;\n }\n console.log('======鼠标坐标=====', mouse);\n raycaster.setFromCamera(mouse, sdkInstance.player.cameras.floorplan);\n let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);\n if (intersects && intersects.length > 0) {\n let bFirst = true;\n let bool = false;\n let bool1 = false;\n for (let z = 0; z < intersects.length; z++) {\n let m = intersects[z];\n if (m && m.object && m.object.userData.type == 'water') {\n console.log('===== bench selected =====');\n //window.store.dispatch('benchList/setMouseOverBench', {\n // bench_id: m.object.userData.benchId,\n // pageX: event.x,\n // pageY: event.y,\n // status: true\n //})\n break;\n } else {\n //window.store.dispatch('benchList/setMouseOverBench', {\n // bench_id: m.object.userData.benchId,\n // pageX: event.x,\n // pageY: event.y,\n // status: false\n //})\n }\n }\n bool = false;\n bool1 = false;\n }\n };\n return;\n let outlinePass = null;\n function outlineObj(selectedObjects) {\n composer = new THREE.EffectComposer(sdkInstance.sceneRenderer.renderer); // 特效组件\n\n var renderPass = new THREE.RenderPass(sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);\n composer.addPass(renderPass); // 特效渲染\n\n outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);\n composer.addPass(outlinePass); // 加入高光特效\n\n outlinePass.pulsePeriod = 2; //数值越大,律动越慢\n outlinePass.visibleEdgeColor.set(0xff0000); // 高光颜色\n outlinePass.hiddenEdgeColor.set(0x000000); // 阴影颜色\n outlinePass.usePatternTexture = true; // 使用纹理覆盖?\n outlinePass.edgeStrength = 5; // 高光边缘强度\n outlinePass.edgeGlow = 1; // 边缘微光强度\n outlinePass.edgeThickness = 1; // 高光厚度\n\n var textureLoader = new THREE.TextureLoader();\n textureLoader.load('../models/matcap.png', function (texture) {\n outlinePass.patternTexture = texture;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n outlinePass.selectedObjects = selectedObjects; // 需要高光的obj\n if (composer != null) {\n animate();\n }\n });\n }\n function animate() {\n requestAnimationFrame(animate);\n if (composer != null) {\n composer.render();\n }\n }\n });\n }\n sdkInstance.on(\"modeChange\", function (currentMode, newMode) {\n if (newMode === \"transitioning\") {\n return;\n }\n console.log(newMode, '@@@@@@@@@@@@@');\n });\n });\n}","map":{"version":3,"names":["Vue","fetchAndCombine","UWB","FXAAShader","window","waterMap","sdkInstance","uwbInstance","getsqlData","modeChangeInterval","benchListInterval","otherInterval","fbxLoader1Loaded","fbxLoader2Loaded","textureLoader","THREE","TextureLoader","textureReady","load","textureRunning","textureOffline","benchMeshMap","benchMeshWaterMap","benchDBList","bAddModel","g_PosArrayResult","sqlstr","console","log","msg","cmd","data","name","sql","vm","$socket","emit","datas","now","Date","two_seconds_ago","getTime","Format","one_second_ago","result","item","x","y","z","ang_x","ang_y","ang_z","benchType","bench_type","JSON","parse","stringify","fix_pos_x","fix_pos_y","fix_pos_z","fix_angle_x","fix_angle_y","fix_angle_z","distance","xSubTmp","ySubTmp","zSubTmp","ang_xSubTmp","ang_ySubTmp","ang_zSubTmp","iCount","itemSub","xSub","ySub","zSub","ang_xSub","ang_ySub","ang_zSub","disTmp","Math","sqrt","pow","card_id","bench_id","show_remote_button","benchList","store","getters","benchIdList","map","m","id","currentBench","find","b","texture","status","sceneRenderer","scene","remove","geometry","PlaneGeometry","spriteMaterial","SpriteMaterial","uniformsA","amplitude","value","color","Color","shaderMaterial","ShaderMaterial","uniforms","vertexShader","fragmentShader","side","DoubleSide","transparent","sprite","Sprite","mesh","Mesh","customData","benchId","benchFlag","bShowRemoteButton","type","userData","position","set","rotation","PI","indexOf","Number","add","dracoLoader","DRACOLoader","setDecoderPath","fbxLoader1","GLTFLoader","setDRACOLoader","fbx","bench_img","childMesh","children","childMeshTmp","material","scale","Euler","quaternion","Quaternion","copy","setFromEuler","benchImg","fbxLoader2","sessionStorage","getItem","setInterval","clearInterval","benchPosList","localPosition","Vector3","worldPosition","convertLocalToWorld","pos","getScreenPosition","push","showBenchPos","getsqlDataRealTime","use_fix_pos","uwbInit","originPointPose","uwbIns","upAxis","LR","worldPose","uwbMain","domId","modelWidth","modelHeight","finalMode","callback","radius","height","segments","g_gltf_downloaded","composer","box","sqlQueryInited","g_fbx","g_fbxLoader","renderHeight","renderWidth","ConeGeometry","material1","MeshBasicMaterial","opacity","then","err","error","HousePlay","HOUSEPLAY","playerContainer","document","getElementById","container","start","vrBgContainer","style","width","backgroundColor","setTimeout","element","mapDom","getElementsByClassName","getComputedStyle","parseFloat","ratio","updateScreenSize","marginLeft","marginTop","playersmall","appendChild","player","controls","changeMode","cameras","floorplan","setY","on","mode","display","worldQuaternion","w","ambientLight","AmbientLight","pointLight","PointLight","length","canvas","getElementsByTagName","borderRadius","onmousedown","event","mouse","Vector2","raycaster","Raycaster","clientX","innerWidth","clientY","innerHeight","setFromCamera","camera","intersects","intersectObjects","bFirst","bool","bool1","forEach","object","handleBenchClick","BoxHelper","handleListClick","onmousemove","housePlayer","abs","outlinePass","outlineObj","selectedObjects","EffectComposer","renderer","renderPass","RenderPass","addPass","OutlinePass","pulsePeriod","visibleEdgeColor","hiddenEdgeColor","usePatternTexture","edgeStrength","edgeGlow","edgeThickness","patternTexture","wrapS","RepeatWrapping","wrapT","animate","requestAnimationFrame","render","currentMode","newMode"],"sources":["/Users/mac/projects/mime/mine/src/uwb-sample.js"],"sourcesContent":["//import { FBXLoader } from \"./FBXLoader.js\";\n//import { GLTFLoader } from \"three/addons/loaders/GLTFLoader.js\";\n//import { MeshBasicMaterial, MeshStandardMaterial, Vector3 } from \"three\";\nimport Vue from \"vue\";\nimport fetchAndCombine from \"../public/loader/loader\";\nimport { UWB } from \"../public/plugin/uwb/index.js\";\nimport { FXAAShader } from \"../public/shader/FAAXShader.js\"\nimport '../public/libs/tools.js'\n\n// 定义一个函数,接受元素ID和一个回调函数作为参数,用于处理点击事件\nwindow.waterMap = {}\nwindow.sdkInstance = null;\nwindow.uwbInstance = null;\nwindow.getsqlData = getsqlData;\nwindow.modeChangeInterval = null;\nwindow.benchListInterval = null;\nwindow.otherInterval = null;\nvar fbxLoader1Loaded = false;\nvar fbxLoader2Loaded = false;\n\nlet textureLoader = new THREE.TextureLoader();\nlet textureReady = textureLoader.load('../images/location_ready.png');\nlet textureRunning = textureLoader.load('../images/location_running.png');\nlet textureOffline = textureLoader.load('../images/location_offline.png');\n\nwindow.benchMeshMap = {};\nwindow.benchMeshWaterMap = {};\nwindow.benchDBList = null\n\nfunction getsqlData(sdkInstance, uwbInstance, bAddModel) {\n let g_PosArrayResult = null;\n if (g_PosArrayResult == null) {\n var sqlstr = \"SELECT * FROM dat_bench_extend order by bench_id asc\";\n\n //sqlstr = sqlstr.format(two_seconds_ago, two_seconds_ago)\n console.log(sqlstr);\n let msg = {\n cmd: \"query\", // server端要进行判断的\n data: {\n name: \"name\", // 这个无所谓怎么写,有就行\n //sql: 'select * from his_location_tadiao_result_unity limit 300'\n sql: sqlstr,\n },\n };\n // 触发事件进行从服务器获取数据\n window.vm.$socket.emit(\"REPT\", msg, (datas) => {\n g_PosArrayResult = datas.data;\n window.benchDBList = datas.data;\n var now = new Date();\n var two_seconds_ago = new Date(now.getTime() - 2 * 1000).Format(\n \"yyyy-MM-dd hh:mm:ss.S\"\n );\n var one_second_ago = new Date(now.getTime() - 1 * 1000).Format(\n \"yyyy-MM-dd hh:mm:ss.S\"\n );\n\n {\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n }\n else {\n }\n\n var distance = 10000.0;\n\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n\n\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let show_remote_button = item.show_remote_button;\n // 添加水滴\n let benchList = window.store ? window.store.getters['benchList/getBenchList'] : [];\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n let currentBench = benchList.find(b => b.id == bench_id);\n let texture = null;\n if (currentBench) {\n switch (currentBench.status) {\n case \"ready\":\n texture = textureReady;\n break;\n case \"running\":\n texture = textureRunning;\n break;\n case \"offline\":\n texture = textureOffline;\n break;\n default:\n texture = textureOffline;\n break;\n }\n } else {\n texture = textureOffline;\n }\n\n if (window.waterMap[bench_id]) {\n sdkInstance.sceneRenderer.scene.remove(window.waterMap[bench_id]);\n }\n\n // 创建精灵对象\n const geometry = new THREE.PlaneGeometry(1.2, 1.2);\n let spriteMaterial = new THREE.SpriteMaterial({\n map: texture\n });\n let uniformsA = {\n amplitude: { value: 1.0 },\n color: { value: new THREE.Color(0xff2200) },\n texture: { value: texture }\n };\n // 创建着色器材质\n const shaderMaterial = new THREE.ShaderMaterial({\n uniforms: uniformsA,\n vertexShader: `varying vec2 vUv;\n uniform sampler2D texture;\n void main() {\n vUv = uv;\n vec4 t = texture2D( texture, vUv );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position.x,position.y,position.z+t.g, 1.0 );\n }`,\n fragmentShader: `varying vec2 vUv;\n uniform sampler2D texture;\n void main() {\n gl_FragColor = texture2D( texture, vUv );\n }`,\n side: THREE.DoubleSide,\n transparent: true\n })\n let sprite = new THREE.Sprite(spriteMaterial);\n\n const mesh = new THREE.Mesh(geometry, shaderMaterial);\n var customData = {\n benchId: bench_id,\n benchFlag: false,\n bShowRemoteButton: false,\n type: 'water'\n };\n mesh.userData = customData;\n // sprite.scale.set(100, 100, 1);\n mesh.position.set(x, y + 10, z);\n mesh.rotation.set(-Math.PI / 2, 0, 0);\n window.waterMap[bench_id] = mesh;\n console.log('添加模型和水滴1111',benchIdList)\n if (sdkInstance) {\n if (benchIdList.indexOf(Number(bench_id)) > 0) {\n if (bAddModel && window.benchMeshWaterMap[bench_id]) {\n window.benchMeshWaterMap[bench_id] = mesh;\n console.log('添加benchid', bench_id)\n sdkInstance.sceneRenderer.scene.add(mesh)\n }\n else {\n window.benchMeshWaterMap[bench_id] = mesh;\n }\n }\n\n }\n };\n }\n\n let dracoLoader = new THREE.DRACOLoader();\n THREE.DRACOLoader.setDecoderPath(\"../gltf/\");\n\n var fbxLoader1 = new THREE.GLTFLoader();\n fbxLoader1.setDRACOLoader(dracoLoader);\n if (!fbxLoader1Loaded) {\n fbxLoader1.load(\"../models/meshDraco.gltf\", function (fbx) {\n console.log('loadzmg')\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n //fbxLoader1Loaded = true;\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n }\n else {\n }\n\n var distance = 10000.0;\n\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n\n\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let bench_img = item.bench_img;\n let show_remote_button = item.show_remote_button;\n if (benchType == 1) {\n console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n var childMesh = fbx.scene.children[0].children[0];\n let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material)\n let scale = 5;\n childMeshTmp.scale.set(scale, scale, scale)\n //fbx.scene.children[0].scale.set(5, 5, 5)\n //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)\n childMeshTmp.position.set(x, y, z)\n var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);\n //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);\n var quaternion = new THREE.Quaternion();\n childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler))\n var customData = {\n benchId: bench_id,\n benchFlag: true,\n bShowRemoteButton: show_remote_button == 1 ? true : false,\n benchImg: bench_img,\n };\n childMeshTmp.userData = customData;\n\n\n console.log('添加模型和水滴1111')\n if (benchIdList.indexOf(Number(bench_id)) > 0) {\n if (bAddModel && window.benchMeshMap[bench_id]) {\n window.benchMeshMap[bench_id] = childMeshTmp;\n sdkInstance.sceneRenderer.scene.add(childMeshTmp)\n }\n else {\n window.benchMeshMap[bench_id] = childMeshTmp;\n }\n }\n\n }\n\n };\n })\n }\n\n\n var fbxLoader2 = new THREE.GLTFLoader();\n fbxLoader2.setDRACOLoader(dracoLoader);\n if (!fbxLoader2Loaded) {\n fbxLoader2.load(\"../models/mesh2Draco.gltf\", function (fbx) {\n //fbxLoader2Loaded = true;\n let result = g_PosArrayResult;\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type\n //if (item.use_fix_pos == 1) {\n if (true) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n }\n else {\n }\n\n var distance = 10000.0;\n\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n\n if (g_PosArrayResult) {\n var iCount = 0;\n for (var itemSub of g_PosArrayResult) {\n\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n\n\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n\n let card_id = item.card_id;\n let bench_id = item.bench_id;\n let show_remote_button = item.show_remote_button;\n let bench_img = item.bench_img;\n\n if (benchType == 2) {\n console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n var childMesh = fbx.scene.children[0];\n let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material)\n let scale = 0.05;\n childMeshTmp.scale.set(scale, scale, scale)\n //fbx.scene.children[0].scale.set(5, 5, 5)\n //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)\n childMeshTmp.position.set(x, y, z)\n var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);\n //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);\n var quaternion = new THREE.Quaternion();\n childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler))\n var customData = {\n benchId: bench_id,\n benchFlag: true,\n bShowRemoteButton: show_remote_button == 1 ? true : false,\n benchImg: bench_img,\n };\n childMeshTmp.userData = customData;\n\n if (bAddModel && window.benchMeshMap[bench_id]) {\n window.benchMeshMap[bench_id] = childMeshTmp;\n sdkInstance.sceneRenderer.scene.add(childMeshTmp)\n }\n else {\n window.benchMeshMap[bench_id] = childMeshTmp;\n }\n }\n };\n if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {\n if(!window.otherInterval)\n {\n window.otherInterval = setInterval(() => {\n if (window.uwbInstance) \n {\n clearInterval(window.otherInterval)\n var benchPosList = [];\n for (var item of result) {\n var localPosition = new THREE.Vector3(item.fix_pos_x, item.fix_pos_y, item.fix_pos_z);\n var worldPosition = window.uwbInstance.convertLocalToWorld(localPosition);\n var pos = window.sdkInstance.getScreenPosition(worldPosition);\n benchPosList.push(\n {\n x: pos.x,\n y: pos.y,\n benchType: item.bench_type,\n benchId: item.bench_id,\n benchImg: item.bench_img,\n }\n )\n }\n console.log('benchPosList',benchPosList)\n window.showBenchPos(benchPosList);\n setInterval(()=>{\n getsqlDataRealTime();\n },30*1000)\n }\n }, 2 * 1000)\n }\n }\n })\n }\n });\n }\n\n}\n\nfunction getsqlDataRealTime() {\n if (true) {\n var sqlstr = \"select t3.* ,t4.fix_pos_x, t4.fix_pos_y, t4.fix_pos_z,t4.fix_angle_x, t4.fix_angle_y, t4.fix_angle_z, t4.bench_type, t4.bench_id, t4.bench_img, t4.use_fix_pos from (SELECT t1.* FROM his_location_tadiao_result_unity t1 INNER JOIN (SELECT MAX(loc_time) AS max_loc_time FROM his_location_tadiao_result_unity GROUP BY card_id) t2 ON t1.loc_time = t2.max_loc_time) as t3 INNER JOIN dat_bench_extend t4 ON (t4.card_id=t3.card_id)\";\n\n //sqlstr = sqlstr.format(two_seconds_ago, two_seconds_ago)\n console.log(sqlstr);\n let msg = {\n cmd: \"query\", // server端要进行判断的\n data: {\n name: \"name\", // 这个无所谓怎么写,有就行\n //sql: 'select * from his_location_tadiao_result_unity limit 300'\n sql: sqlstr,\n },\n };\n // 触发事件进行从服务器获取数据\n window.vm.$socket.emit(\"REPT\", msg, (datas) => {\n let result = datas.data;\n var benchPosList = [];\n for (var item of result) {\n let x = item.x;\n let y = item.y;\n let z = item.z;\n let ang_x = 0.0;\n let ang_y = 0.0;\n let ang_z = 0.0;\n let benchType = item.bench_type\n if (item.use_fix_pos == 1) {\n x = JSON.parse(JSON.stringify(item.fix_pos_x));\n y = JSON.parse(JSON.stringify(item.fix_pos_y));\n z = JSON.parse(JSON.stringify(item.fix_pos_z));\n ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));\n ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));\n ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));\n }\n else if (item.use_fix_pos == 2) {\n var distance = 10000.0;\n var xSubTmp = x;\n var ySubTmp = y;\n var zSubTmp = z;\n x = x - 14.7;\n z = y - 14\n var ang_xSubTmp = ang_x;\n var ang_ySubTmp = ang_y;\n var ang_zSubTmp = ang_z;\n if (window.benchDBList) {\n var iCount = 0;\n for (var itemSub of window.benchDBList) {\n iCount++;\n var xSub = itemSub.x;\n var ySub = itemSub.y;\n var zSub = itemSub.z;\n var ang_xSub = 0.0;\n var ang_ySub = 0.0;\n var ang_zSub = 0.0;\n xSub = itemSub.fix_pos_x;\n ySub = itemSub.fix_pos_y;\n zSub = itemSub.fix_pos_z;\n ang_xSub = itemSub.fix_angle_x;\n ang_ySub = itemSub.fix_angle_y;\n ang_zSub = itemSub.fix_angle_z;\n var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(z - zSub, 2))\n if (disTmp < distance) {\n distance = disTmp;\n xSubTmp = xSub;\n ySubTmp = ySub;\n zSubTmp = zSub;\n ang_xSubTmp = ang_xSub;\n ang_ySubTmp = ang_ySub;\n ang_zSubTmp = ang_zSub;\n }\n }\n }\n x = xSubTmp;\n y = ySubTmp;\n z = zSubTmp;\n ang_x = ang_xSubTmp;\n ang_y = ang_ySubTmp;\n ang_z = ang_zSubTmp;\n\n x = JSON.parse(JSON.stringify(xSubTmp));\n y = JSON.parse(JSON.stringify(ySubTmp));\n z = JSON.parse(JSON.stringify(zSubTmp));\n ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));\n ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));\n ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));\n\n }\n if(window.benchMeshMap[item.bench_id] && window.benchMeshWaterMap[item.bench_id])\n {\n window.benchMeshMap[item.bench_id].position.set(x, y, z);\n window.benchMeshWaterMap[item.bench_id].position.set(x, y + 10, z);\n if (item.use_fix_pos == 0) {\n window.benchMeshMap[item.bench_id].position.set(x - 14.7, JSON.parse(JSON.stringify(item.fix_pos_y)), y - 14);\n window.benchMeshWaterMap[item.bench_id].position.set(x - 14.7, JSON.parse(JSON.stringify(item.fix_pos_y)) + 10, y - 14);\n }\n //var localPosition = new THREE.Vector3(x, y, z);\n var worldPosition = window.uwbInstance.convertLocalToWorld(window.benchMeshMap[item.bench_id].position);\n var pos = window.sdkInstance.getScreenPosition(worldPosition);\n benchPosList.push(\n {\n x: pos.x,\n y: pos.y,\n benchType: item.bench_type,\n benchId: item.bench_id,\n benchImg: item.bench_img,\n }\n )\n }\n }\n console.log('benchPosList', benchPosList)\n window.showBenchPos(benchPosList);\n });\n }\n\n}\n\n// uwb 插件初始化\nfunction uwbInit(originPointPose) {\n console.log(\"=====初始化uwb 实例=====\");\n const uwbIns = new UWB({\n upAxis: \"y-up\",\n LR: \"r\",\n worldPose: originPointPose,\n });\n return uwbIns;\n}\n\nexport function uwbMain(domId, modelWidth, modelHeight, finalMode, callback) {\n console.log(\"uwbMain enter\");\n finalMode = finalMode || \"floorplan\";\n var radius = 0.3;\n var height = 0.5;\n var segments = 4;\n var color = 0x00ff00;\n let g_gltf_downloaded = false;\n let composer = null;\n let box = null;\n let sqlQueryInited = false;\n let g_fbx = null;\n let g_fbxLoader = null;\n let sdkInstance = null;\n window.renderHeight = modelHeight;\n window.renderWidth = modelWidth;\n var geometry = new THREE.ConeGeometry(radius, height, segments);\n var material1 = new THREE.MeshBasicMaterial({\n color: color,\n opacity: 0.2,\n transparent: true,\n });\n\n fetchAndCombine().then(([err, data]) => {\n if (err) {\n console.error(err);\n console.log(\"模型加载出错\");\n } else {\n let HousePlay = HOUSEPLAY.HousePlay;\n let playerContainer = document.getElementById(domId)\n data.container = playerContainer;\n sdkInstance = new HousePlay(data);\n window.sdkInstance = sdkInstance;\n sdkInstance.start();\n let vrBgContainer = document.getElementById(\"vr-bg-container\");\n vrBgContainer.style.width = modelWidth + 'px'\n vrBgContainer.style.height = modelHeight + 'px'\n vrBgContainer.style.backgroundColor = 'transparent'\n\n window.sdkInstance.emit(\"endLoading\", finalMode);\n window.sdkInstance.emit(\"modeChange\", null, finalMode);\n if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {\n setTimeout(() => {\n var element = document.getElementById('house-player');\n var container = document.getElementById(\"ordinary-map\")\n container.style.opacity = 1;\n let mapDom = document.getElementsByClassName(\"ordinary-map-container\")[0];\n let style = getComputedStyle(mapDom);\n let width = parseFloat(style.width);\n let height = parseFloat(style.height);\n\n let ratio = 1.8;\n window.renderWidth = width * ratio;\n window.renderHeight = height * ratio;\n window.sdkInstance.sceneRenderer.updateScreenSize(width * ratio, height * ratio);\n element.style.marginLeft = ((width - (width * ratio)) / 2) + 'px';\n element.style.marginTop = ((height - (height * ratio)) / 2) + 'px';\n let playersmall = document.getElementById('playersmall')\n playersmall.appendChild(element)\n modeChangeInterval = setInterval(() => {\n if (window.sdkInstance.player.controls) {\n clearInterval(modeChangeInterval);\n window.sdkInstance.changeMode('floorplan');\n sdkInstance.player.cameras.floorplan.position.setY(10)\n }\n }, 500)\n }, 1500)\n }\n\n sdkInstance.on(\"endLoading\", (mode) => {\n console.log(mode, '-----+++++-----')\n console.log('endLoading')\n vrBgContainer.style.display = \"none\";\n\n // 本地坐标系原点位姿\n const originPointPose = {\n worldPosition: { x: 0, y: 0, z: 0 },\n worldQuaternion: {\n x: 0,\n y: 0,\n z: 0,\n w: 1,\n },\n };\n\n //初始化uwb插件\n let uwbInstance = uwbInit(originPointPose);\n window.uwbInstance = uwbInstance;\n\n\n if (g_gltf_downloaded == false) {\n let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n pointLight.position.set(200, 200, 200); //设置点光源位置\n sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n g_gltf_downloaded = true;\n }\n let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n pointLight.position.set(200, 200, 200); //设置点光源位置\n sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n\n if (g_fbxLoader == null) {\n g_fbxLoader = new THREE.GLTFLoader();\n // g_fbxLoader.load(\"../models/mesh2.gltf\", function (fbx) {\n // let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n // sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n // let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n // pointLight.position.set(200, 200, 200); //设置点光源位置\n // sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n // g_fbx = fbx;\n // console.log(\"控制台查看加载gltf文件返回的对象结构\", fbx);\n // //fbx.scene.children[0].children[0].scale.set(5, 5, 5)\n // //window.shader = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);\n // //window.shader1 = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);\n // });\n // if (false) {\n // sqlQueryInited = true;\n // var index = 0;\n // setTimeout(\n // function (card_id, x, y, z) {\n // \n // },\n // 500\n // );\n // }\n benchListInterval = setInterval(() => {\n let benchIdList = window.store.getters['benchList/getBenchList'].map(m => m.id);\n if (benchIdList.length > 0) {\n clearInterval(benchListInterval)\n getsqlData(sdkInstance, uwbInstance, false)\n }\n }, 500);\n }\n\n\n // 创建物体add\n // 模型加载完成,进入模型页面,添加摆放的物体\n let canvas = document.getElementsByTagName('canvas')[0]\n\n canvas.style.borderRadius = \"0px\"\n canvas.onmousedown = (event) => {\n\n let mouse = new THREE.Vector2();\n let raycaster = new THREE.Raycaster();\n mouse.x = (event.clientX / window.innerWidth) * 2 - 1;\n mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;\n\n\n raycaster.setFromCamera(mouse, sdkInstance.player.camera);\n let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);\n\n if (intersects && intersects.length > 0) {\n let bFirst = true;\n let bool = false;\n let bool1 = false;\n intersects.forEach(m => {\n console.log('点击水滴', event, m && m.object && m.object.geometry && m.object.geometry.type, m.object)\n if (m.object.geometry.type != \"PlaneBufferGeometry\") {\n console.log('onmousedown', 111)\n if (m.object.userData && m.object.userData.benchFlag == true) {\n if (!bool) {\n bool = true;\n //m.object.material = window.shader1;\n ////m.object.scale.set(10, 10, 10)\n //m.object.scale.set(5, 5, 5)\n //outlineObj(m.object)\n // let player = document.getElementById(domId)\n // player.style.display = \"none\n if (box) {\n sdkInstance.sceneRenderer.scene.remove(box);\n }\n window.handleBenchClick(m.object.userData.benchId, m.object.userData.bShowRemoteButton)\n box = new THREE.BoxHelper(m.object, '#ff0000'); //object 模型\n sdkInstance.sceneRenderer.scene.add(box)\n //let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光\n //sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中\n //let pointLight = new THREE.PointLight(0xffffff, 1, 0);\n //pointLight.position.set(200, 200, 200); //设置点光源位置\n //sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景\n }\n //outlineObj(m.object\n //m.object.material = FXAAShader\n\n }\n } else if (m.object.geometry.type == \"PlaneBufferGeometry\") {\n console.log('onmousedown', 222)\n if (m.object.userData && m.object.userData.benchFlag == true) {\n window.handleListClick(m.object.userData.benchId)\n }\n }\n })\n bool = false;\n bool1 = false;\n }\n }\n\n canvas.onmousemove = (event) => {\n\n let mouse = new THREE.Vector2();\n let raycaster = new THREE.Raycaster();\n let housePlayer = document.getElementById('house-player');\n let marginLeft = 0;\n let marginTop = 0;\n if (housePlayer) {\n let mapDom = document.getElementsByClassName(\"ordinary-map-container\")[0];\n let style = getComputedStyle(mapDom);\n let width = parseFloat(style.width);\n let height = parseFloat(style.height);\n marginLeft = (width - (width * 1.8)) / 2;\n marginTop = (height - (height * 1.8)) / 2;\n\n mouse.x = ((event.clientX + Math.abs(marginLeft)) / parseFloat(housePlayer.style.width)) * 2 - 1;\n mouse.y = -((event.clientY + Math.abs(marginTop)) / parseFloat(housePlayer.style.height)) * 2 + 1;\n }\n\n\n\n console.log('======鼠标坐标=====', mouse)\n\n raycaster.setFromCamera(mouse, sdkInstance.player.cameras.floorplan);\n let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);\n\n if (intersects && intersects.length > 0) {\n let bFirst = true;\n let bool = false;\n let bool1 = false;\n for (let z = 0; z < intersects.length; z++) {\n let m = intersects[z];\n if (m && m.object && (m.object.userData.type == 'water')) {\n console.log('===== bench selected =====')\n //window.store.dispatch('benchList/setMouseOverBench', {\n // bench_id: m.object.userData.benchId,\n // pageX: event.x,\n // pageY: event.y,\n // status: true\n //})\n break;\n } else {\n //window.store.dispatch('benchList/setMouseOverBench', {\n // bench_id: m.object.userData.benchId,\n // pageX: event.x,\n // pageY: event.y,\n // status: false\n //})\n }\n }\n bool = false;\n bool1 = false;\n }\n }\n return;\n\n let outlinePass = null;\n\n function outlineObj(selectedObjects) {\n\n composer = new THREE.EffectComposer(sdkInstance.sceneRenderer.renderer); // 特效组件\n\n var renderPass = new THREE.RenderPass(sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);\n composer.addPass(renderPass); // 特效渲染\n\n outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);\n composer.addPass(outlinePass); // 加入高光特效\n\n outlinePass.pulsePeriod = 2; //数值越大,律动越慢\n outlinePass.visibleEdgeColor.set(0xff0000); // 高光颜色\n outlinePass.hiddenEdgeColor.set(0x000000);// 阴影颜色\n outlinePass.usePatternTexture = true; // 使用纹理覆盖?\n outlinePass.edgeStrength = 5; // 高光边缘强度\n outlinePass.edgeGlow = 1; // 边缘微光强度\n outlinePass.edgeThickness = 1; // 高光厚度\n\n var textureLoader = new THREE.TextureLoader();\n textureLoader.load('../models/matcap.png', function (texture) {\n\n outlinePass.patternTexture = texture;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n\n\n outlinePass.selectedObjects = selectedObjects; // 需要高光的obj\n if (composer != null) {\n animate();\n }\n })\n\n }\n\n\n function animate() {\n requestAnimationFrame(animate);\n if (composer != null) {\n composer.render();\n }\n }\n\n });\n }\n sdkInstance.on(\"modeChange\", function (currentMode, newMode) {\n if (newMode === \"transitioning\") {\n return;\n }\n console.log(newMode, '@@@@@@@@@@@@@')\n });\n });\n}\n"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}