uwb-sample.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. //import { FBXLoader } from "./FBXLoader.js";
  2. //import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
  3. //import { MeshBasicMaterial, MeshStandardMaterial, Vector3 } from "three";
  4. import Vue from "vue";
  5. import fetchAndCombine from "../public/loader/loader";
  6. import { UWB } from "../public/plugin/uwb/index.js";
  7. import { FXAAShader } from "../public/shader/FAAXShader.js"
  8. import '../public/libs/tools.js'
  9. // 定义一个函数,接受元素ID和一个回调函数作为参数,用于处理点击事件
  10. window.waterMap = {}
  11. window.sdkInstance = null;
  12. window.uwbInstance = null;
  13. window.getsqlData = getsqlData;
  14. var fbxLoader1Loaded = false;
  15. var fbxLoader2Loaded = false;
  16. let textureLoader = new THREE.TextureLoader();
  17. let textureReady = textureLoader.load('../images/location_ready.png');
  18. let textureRunning = textureLoader.load('../images/location_running.png');
  19. let textureOffline = textureLoader.load('../images/location_offline.png');
  20. function getsqlData(sdkInstance, uwbInstance) {
  21. let g_PosArrayResult = null;
  22. if (g_PosArrayResult == null) {
  23. var sqlstr = "SELECT * FROM dat_bench_extend order by bench_id asc";
  24. //sqlstr = sqlstr.format(two_seconds_ago, two_seconds_ago)
  25. console.log(sqlstr);
  26. let msg = {
  27. cmd: "query", // server端要进行判断的
  28. data: {
  29. name: "name", // 这个无所谓怎么写,有就行
  30. //sql: 'select * from his_location_tadiao_result_unity limit 300'
  31. sql: sqlstr,
  32. },
  33. };
  34. // 触发事件进行从服务器获取数据
  35. window.vm.$socket.emit("REPT", msg, (datas) => {
  36. g_PosArrayResult = datas.data;
  37. var now = new Date();
  38. var two_seconds_ago = new Date(now.getTime() - 2 * 1000).Format(
  39. "yyyy-MM-dd hh:mm:ss.S"
  40. );
  41. var one_second_ago = new Date(now.getTime() - 1 * 1000).Format(
  42. "yyyy-MM-dd hh:mm:ss.S"
  43. );
  44. {
  45. let result = g_PosArrayResult;
  46. for (var item of result) {
  47. let x = item.x;
  48. let y = item.y;
  49. let z = item.z;
  50. let ang_x = 0.0;
  51. let ang_y = 0.0;
  52. let ang_z = 0.0;
  53. let benchType = item.bench_type
  54. if (item.use_fix_pos == 1) {
  55. x = JSON.parse(JSON.stringify(item.fix_pos_x));
  56. y = JSON.parse(JSON.stringify(item.fix_pos_y));
  57. z = JSON.parse(JSON.stringify(item.fix_pos_z));
  58. ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));
  59. ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));
  60. ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));
  61. }
  62. else {
  63. }
  64. var distance = 10000.0;
  65. var xSubTmp = x;
  66. var ySubTmp = y;
  67. var zSubTmp = z;
  68. var ang_xSubTmp = ang_x;
  69. var ang_ySubTmp = ang_y;
  70. var ang_zSubTmp = ang_z;
  71. if (g_PosArrayResult) {
  72. var iCount = 0;
  73. for (var itemSub of g_PosArrayResult) {
  74. iCount++;
  75. var xSub = itemSub.x;
  76. var ySub = itemSub.y;
  77. var zSub = itemSub.z;
  78. var ang_xSub = 0.0;
  79. var ang_ySub = 0.0;
  80. var ang_zSub = 0.0;
  81. xSub = itemSub.fix_pos_x;
  82. ySub = itemSub.fix_pos_y;
  83. zSub = itemSub.fix_pos_z;
  84. ang_xSub = itemSub.fix_angle_x;
  85. ang_ySub = itemSub.fix_angle_y;
  86. ang_zSub = itemSub.fix_angle_z;
  87. var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))
  88. if (disTmp < distance) {
  89. distance = disTmp;
  90. xSubTmp = xSub;
  91. ySubTmp = ySub;
  92. zSubTmp = zSub;
  93. ang_xSubTmp = ang_xSub;
  94. ang_ySubTmp = ang_ySub;
  95. ang_zSubTmp = ang_zSub;
  96. }
  97. }
  98. }
  99. x = xSubTmp;
  100. y = ySubTmp;
  101. z = zSubTmp;
  102. ang_x = ang_xSubTmp;
  103. ang_y = ang_ySubTmp;
  104. ang_z = ang_zSubTmp;
  105. x = JSON.parse(JSON.stringify(xSubTmp));
  106. y = JSON.parse(JSON.stringify(ySubTmp));
  107. z = JSON.parse(JSON.stringify(zSubTmp));
  108. ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));
  109. ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));
  110. ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));
  111. let card_id = item.card_id;
  112. let bench_id = item.bench_id;
  113. let show_remote_button = item.show_remote_button;
  114. // 添加水滴
  115. let benchList = window.store ? window.store.getters['benchList/getBenchList'] : [];
  116. let currentBench = benchList.find(b => b.id == bench_id);
  117. let texture = null;
  118. if (currentBench) {
  119. switch(currentBench.status) {
  120. case "ready":
  121. texture = textureReady;
  122. break;
  123. case "running":
  124. texture = textureRunning;
  125. break;
  126. case "offline":
  127. texture = textureOffline;
  128. break;
  129. default:
  130. texture = textureOffline;
  131. break;
  132. }
  133. } else {
  134. texture = textureOffline;
  135. }
  136. if (window.waterMap[bench_id]) {
  137. sdkInstance.sceneRenderer.scene.remove(window.waterMap[bench_id]);
  138. }
  139. // 创建精灵对象
  140. const geometry = new THREE.PlaneGeometry(1.2, 1.2);
  141. let spriteMaterial = new THREE.SpriteMaterial({
  142. map: texture
  143. });
  144. let uniformsA = {
  145. amplitude: {value: 1.0},
  146. color: {value: new THREE.Color(0xff2200)},
  147. texture: {value: texture }
  148. };
  149. // 创建着色器材质
  150. const shaderMaterial = new THREE.ShaderMaterial({
  151. uniforms: uniformsA,
  152. vertexShader: `varying vec2 vUv;
  153. uniform sampler2D texture;
  154. void main() {
  155. vUv = uv;
  156. vec4 t = texture2D( texture, vUv );
  157. gl_Position = projectionMatrix * modelViewMatrix * vec4( position.x,position.y,position.z+t.g, 1.0 );
  158. }`,
  159. fragmentShader: `varying vec2 vUv;
  160. uniform sampler2D texture;
  161. void main() {
  162. gl_FragColor = texture2D( texture, vUv );
  163. }`,
  164. side: THREE.DoubleSide,
  165. transparent: true
  166. })
  167. let sprite = new THREE.Sprite(spriteMaterial);
  168. const mesh = new THREE.Mesh(geometry, shaderMaterial);
  169. var customData = {
  170. benchId: bench_id,
  171. benchFlag: false,
  172. bShowRemoteButton: false,
  173. type: 'water'
  174. };
  175. mesh.userData = customData;
  176. // sprite.scale.set(100, 100, 1);
  177. mesh.position.set(x, y + 10, z);
  178. mesh.rotation.set(-Math.PI / 2, 0, 0);
  179. window.waterMap[bench_id] = mesh;
  180. console.log('添加模型和水滴1111')
  181. if (sdkInstance) {
  182. sdkInstance.sceneRenderer.scene.add(mesh)
  183. }
  184. };
  185. }
  186. let dracoLoader = new THREE.DRACOLoader();
  187. THREE.DRACOLoader.setDecoderPath("../gltf/");
  188. var fbxLoader1 = new THREE.GLTFLoader();
  189. fbxLoader1.setDRACOLoader(dracoLoader);
  190. if (!fbxLoader1Loaded) {
  191. fbxLoader1.load("../models/meshDraco.gltf", function (fbx) {
  192. fbxLoader1Loaded = true;
  193. let result = g_PosArrayResult;
  194. for (var item of result) {
  195. let x = item.x;
  196. let y = item.y;
  197. let z = item.z;
  198. let ang_x = 0.0;
  199. let ang_y = 0.0;
  200. let ang_z = 0.0;
  201. let benchType = item.bench_type
  202. if (item.use_fix_pos == 1) {
  203. x = JSON.parse(JSON.stringify(item.fix_pos_x));
  204. y = JSON.parse(JSON.stringify(item.fix_pos_y));
  205. z = JSON.parse(JSON.stringify(item.fix_pos_z));
  206. ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));
  207. ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));
  208. ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));
  209. }
  210. else {
  211. }
  212. var distance = 10000.0;
  213. var xSubTmp = x;
  214. var ySubTmp = y;
  215. var zSubTmp = z;
  216. var ang_xSubTmp = ang_x;
  217. var ang_ySubTmp = ang_y;
  218. var ang_zSubTmp = ang_z;
  219. if (g_PosArrayResult) {
  220. var iCount = 0;
  221. for (var itemSub of g_PosArrayResult) {
  222. iCount++;
  223. var xSub = itemSub.x;
  224. var ySub = itemSub.y;
  225. var zSub = itemSub.z;
  226. var ang_xSub = 0.0;
  227. var ang_ySub = 0.0;
  228. var ang_zSub = 0.0;
  229. xSub = itemSub.fix_pos_x;
  230. ySub = itemSub.fix_pos_y;
  231. zSub = itemSub.fix_pos_z;
  232. ang_xSub = itemSub.fix_angle_x;
  233. ang_ySub = itemSub.fix_angle_y;
  234. ang_zSub = itemSub.fix_angle_z;
  235. var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))
  236. if (disTmp < distance) {
  237. distance = disTmp;
  238. xSubTmp = xSub;
  239. ySubTmp = ySub;
  240. zSubTmp = zSub;
  241. ang_xSubTmp = ang_xSub;
  242. ang_ySubTmp = ang_ySub;
  243. ang_zSubTmp = ang_zSub;
  244. }
  245. }
  246. }
  247. x = xSubTmp;
  248. y = ySubTmp;
  249. z = zSubTmp;
  250. ang_x = ang_xSubTmp;
  251. ang_y = ang_ySubTmp;
  252. ang_z = ang_zSubTmp;
  253. x = JSON.parse(JSON.stringify(xSubTmp));
  254. y = JSON.parse(JSON.stringify(ySubTmp));
  255. z = JSON.parse(JSON.stringify(zSubTmp));
  256. ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));
  257. ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));
  258. ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));
  259. let card_id = item.card_id;
  260. let bench_id = item.bench_id;
  261. let show_remote_button = item.show_remote_button;
  262. if (benchType == 1) {
  263. console.log("控制台查看加载gltf文件返回的对象结构", fbx);
  264. var childMesh = childMesh = fbx.scene.children[0].children[0];
  265. let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material)
  266. let scale = 5;
  267. childMeshTmp.scale.set(scale, scale, scale)
  268. //fbx.scene.children[0].scale.set(5, 5, 5)
  269. //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)
  270. childMeshTmp.position.set(x, y, z)
  271. var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);
  272. //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);
  273. var quaternion = new THREE.Quaternion();
  274. childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler))
  275. var customData = {
  276. benchId: bench_id,
  277. benchFlag: true,
  278. bShowRemoteButton: show_remote_button == 1 ? true : false,
  279. };
  280. childMeshTmp.userData = customData;
  281. console.log('添加模型和水滴1111')
  282. sdkInstance.sceneRenderer.scene.add(childMeshTmp)
  283. }
  284. };
  285. })
  286. }
  287. var fbxLoader2 = new THREE.GLTFLoader();
  288. fbxLoader2.setDRACOLoader(dracoLoader);
  289. if (!fbxLoader2Loaded) {
  290. fbxLoader2.load("../models/mesh2Draco.gltf", function (fbx) {
  291. fbxLoader1Loaded = true;
  292. let result = g_PosArrayResult;
  293. for (var item of result) {
  294. let x = item.x;
  295. let y = item.y;
  296. let z = item.z;
  297. let ang_x = 0.0;
  298. let ang_y = 0.0;
  299. let ang_z = 0.0;
  300. let benchType = item.bench_type
  301. if (item.use_fix_pos == 1) {
  302. x = JSON.parse(JSON.stringify(item.fix_pos_x));
  303. y = JSON.parse(JSON.stringify(item.fix_pos_y));
  304. z = JSON.parse(JSON.stringify(item.fix_pos_z));
  305. ang_x = JSON.parse(JSON.stringify(item.fix_angle_x));
  306. ang_y = JSON.parse(JSON.stringify(item.fix_angle_y));
  307. ang_z = JSON.parse(JSON.stringify(item.fix_angle_z));
  308. }
  309. else {
  310. }
  311. var distance = 10000.0;
  312. var xSubTmp = x;
  313. var ySubTmp = y;
  314. var zSubTmp = z;
  315. var ang_xSubTmp = ang_x;
  316. var ang_ySubTmp = ang_y;
  317. var ang_zSubTmp = ang_z;
  318. if (g_PosArrayResult) {
  319. var iCount = 0;
  320. for (var itemSub of g_PosArrayResult) {
  321. iCount++;
  322. var xSub = itemSub.x;
  323. var ySub = itemSub.y;
  324. var zSub = itemSub.z;
  325. var ang_xSub = 0.0;
  326. var ang_ySub = 0.0;
  327. var ang_zSub = 0.0;
  328. xSub = itemSub.fix_pos_x;
  329. ySub = itemSub.fix_pos_y;
  330. zSub = itemSub.fix_pos_z;
  331. ang_xSub = itemSub.fix_angle_x;
  332. ang_ySub = itemSub.fix_angle_y;
  333. ang_zSub = itemSub.fix_angle_z;
  334. var disTmp = Math.sqrt(Math.pow(x - xSub, 2) + Math.pow(y - ySub, 2) + Math.pow(z - zSub, 2))
  335. if (disTmp < distance) {
  336. distance = disTmp;
  337. xSubTmp = xSub;
  338. ySubTmp = ySub;
  339. zSubTmp = zSub;
  340. ang_xSubTmp = ang_xSub;
  341. ang_ySubTmp = ang_ySub;
  342. ang_zSubTmp = ang_zSub;
  343. }
  344. }
  345. }
  346. x = xSubTmp;
  347. y = ySubTmp;
  348. z = zSubTmp;
  349. ang_x = ang_xSubTmp;
  350. ang_y = ang_ySubTmp;
  351. ang_z = ang_zSubTmp;
  352. x = JSON.parse(JSON.stringify(xSubTmp));
  353. y = JSON.parse(JSON.stringify(ySubTmp));
  354. z = JSON.parse(JSON.stringify(zSubTmp));
  355. ang_x = JSON.parse(JSON.stringify(ang_xSubTmp));
  356. ang_y = JSON.parse(JSON.stringify(ang_ySubTmp));
  357. ang_z = JSON.parse(JSON.stringify(ang_zSubTmp));
  358. let card_id = item.card_id;
  359. let bench_id = item.bench_id;
  360. let show_remote_button = item.show_remote_button;
  361. if (benchType == 2) {
  362. console.log("控制台查看加载gltf文件返回的对象结构", fbx);
  363. var childMesh = fbx.scene.children[0];
  364. let childMeshTmp = new THREE.Mesh(childMesh.geometry, childMesh.material)
  365. let scale = 0.05;
  366. childMeshTmp.scale.set(scale, scale, scale)
  367. //fbx.scene.children[0].scale.set(5, 5, 5)
  368. //fbx.scene.children[0].position.set(8.7, -1.6, 5.4)
  369. childMeshTmp.position.set(x, y, z)
  370. var Euler = new THREE.Euler(Math.PI * ang_x, Math.PI * ang_y, Math.PI * ang_z);
  371. //var Euler = new THREE.Euler( Math.PI*1.5, Math.PI*0, Math.PI*0);
  372. var quaternion = new THREE.Quaternion();
  373. childMeshTmp.quaternion.copy(quaternion.setFromEuler(Euler))
  374. var customData = {
  375. benchId: bench_id,
  376. benchFlag: true,
  377. bShowRemoteButton: show_remote_button == 1 ? true : false,
  378. };
  379. childMeshTmp.userData = customData;
  380. sdkInstance.sceneRenderer.scene.add(childMeshTmp)
  381. }
  382. };
  383. if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {
  384. setTimeout(() => {
  385. var benchPosList = [];
  386. for (var item of result) {
  387. var localPosition = new THREE.Vector3(item.fix_pos_x, item.fix_pos_y, item.fix_pos_z);
  388. var worldPosition = uwbInstance.convertLocalToWorld(localPosition);
  389. var pos = sdkInstance.getScreenPosition(worldPosition);
  390. benchPosList.push(
  391. {
  392. x: pos.x,
  393. y: pos.y,
  394. benchType: item.bench_type,
  395. benchId: item.bench_id
  396. }
  397. )
  398. }
  399. window.showBenchPos(benchPosList);
  400. }, 2000
  401. )
  402. }
  403. })
  404. }
  405. });
  406. }
  407. }
  408. // uwb 插件初始化
  409. function uwbInit(originPointPose) {
  410. console.log("=====初始化uwb 实例=====");
  411. const uwbIns = new UWB({
  412. upAxis: "y-up",
  413. LR: "r",
  414. worldPose: originPointPose,
  415. });
  416. return uwbIns;
  417. }
  418. export function uwbMain(domId, modelWidth, modelHeight, finalMode, callback) {
  419. console.log("uwbMain enter");
  420. finalMode = finalMode || "floorplan";
  421. var radius = 0.3;
  422. var height = 0.5;
  423. var segments = 4;
  424. var color = 0x00ff00;
  425. let g_gltf_downloaded = false;
  426. let composer = null;
  427. let box = null;
  428. let sqlQueryInited = false;
  429. let g_fbx = null;
  430. let g_fbxLoader = null;
  431. let sdkInstance = null;
  432. window.renderHeight = modelHeight;
  433. window.renderWidth = modelWidth;
  434. var geometry = new THREE.ConeGeometry(radius, height, segments);
  435. var material1 = new THREE.MeshBasicMaterial({
  436. color: color,
  437. opacity: 0.2,
  438. transparent: true,
  439. });
  440. fetchAndCombine().then(([err, data]) => {
  441. if (err) {
  442. console.error(err);
  443. console.log("模型加载出错");
  444. } else {
  445. let HousePlay = HOUSEPLAY.HousePlay;
  446. let playerContainer = document.getElementById(domId)
  447. data.container = playerContainer;
  448. sdkInstance = new HousePlay(data);
  449. window.sdkInstance = sdkInstance;
  450. sdkInstance.start();
  451. let vrBgContainer = document.getElementById("vr-bg-container");
  452. vrBgContainer.style.width = modelWidth + 'px'
  453. vrBgContainer.style.height = modelHeight + 'px'
  454. vrBgContainer.style.backgroundColor = 'transparent'
  455. window.sdkInstance.emit("endLoading", finalMode);
  456. window.sdkInstance.emit("modeChange", null, finalMode);
  457. if (!sessionStorage.getItem('3dMode') || sessionStorage.getItem('3dMode') == 0) {
  458. setTimeout(() => {
  459. var element = document.getElementById('house-player');
  460. var container = document.getElementById("ordinary-map")
  461. container.style.opacity = 1;
  462. let mapDom = document.getElementsByClassName("ordinary-map-container")[0];
  463. let style = getComputedStyle(mapDom);
  464. let width = parseFloat(style.width);
  465. let height = parseFloat(style.height);
  466. let ratio = 1.8;
  467. window.renderWidth = width * ratio;
  468. window.renderHeight = height * ratio;
  469. window.sdkInstance.sceneRenderer.updateScreenSize(width * ratio, height * ratio);
  470. element.style.marginLeft = ((width - (width * ratio)) / 2) + 'px';
  471. element.style.marginTop = ((height - (height * ratio)) / 2) + 'px';
  472. let playersmall = document.getElementById('playersmall')
  473. playersmall.appendChild(element)
  474. setTimeout(() => {
  475. window.sdkInstance.changeMode('floorplan');
  476. }, 1200)
  477. }, 1500)
  478. }
  479. sdkInstance.on("endLoading", (mode) => {
  480. console.log(mode, '-----+++++-----')
  481. vrBgContainer.style.display = "none";
  482. // 本地坐标系原点位姿
  483. const originPointPose = {
  484. worldPosition: { x: 0, y: 0, z: 0 },
  485. worldQuaternion: {
  486. x: 0,
  487. y: 0,
  488. z: 0,
  489. w: 1,
  490. },
  491. };
  492. //初始化uwb插件
  493. let uwbInstance = uwbInit(originPointPose);
  494. window.uwbInstance = uwbInstance;
  495. if (g_gltf_downloaded == false) {
  496. let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光
  497. sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中
  498. let pointLight = new THREE.PointLight(0xffffff, 1, 0);
  499. pointLight.position.set(200, 200, 200); //设置点光源位置
  500. sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景
  501. g_gltf_downloaded = true;
  502. }
  503. let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光
  504. sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中
  505. let pointLight = new THREE.PointLight(0xffffff, 1, 0);
  506. pointLight.position.set(200, 200, 200); //设置点光源位置
  507. sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景
  508. if (g_fbxLoader == null) {
  509. g_fbxLoader = new THREE.GLTFLoader();
  510. // g_fbxLoader.load("../models/mesh2.gltf", function (fbx) {
  511. // let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光
  512. // sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中
  513. // let pointLight = new THREE.PointLight(0xffffff, 1, 0);
  514. // pointLight.position.set(200, 200, 200); //设置点光源位置
  515. // sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景
  516. // g_fbx = fbx;
  517. // console.log("控制台查看加载gltf文件返回的对象结构", fbx);
  518. // //fbx.scene.children[0].children[0].scale.set(5, 5, 5)
  519. // //window.shader = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);
  520. // //window.shader1 = new THREE.MeshStandardMaterial(fbx.scene.children[0].children[0].material);
  521. // });
  522. // if (false) {
  523. // sqlQueryInited = true;
  524. // var index = 0;
  525. // setTimeout(
  526. // function (card_id, x, y, z) {
  527. //
  528. // },
  529. // 500
  530. // );
  531. // }
  532. getsqlData(sdkInstance, uwbInstance)
  533. // var timerId = setInterval(function () {
  534. // getsqlData(sdkInstance, uwbInstance)
  535. // }, 1500);
  536. }
  537. // 创建物体add
  538. // 模型加载完成,进入模型页面,添加摆放的物体
  539. let canvas = document.getElementsByTagName('canvas')[0]
  540. canvas.style.borderRadius = "0px"
  541. canvas.onmousedown = (event) => {
  542. let mouse = new THREE.Vector2();
  543. let raycaster = new THREE.Raycaster();
  544. mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  545. mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
  546. raycaster.setFromCamera(mouse, sdkInstance.player.camera);
  547. let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);
  548. if (intersects && intersects.length > 0) {
  549. let bFirst = true;
  550. let bool = false;
  551. let bool1 = false;
  552. intersects.forEach(m => {
  553. console.log('点击水滴', event, m && m.object && m.object.geometry && m.object.geometry.type, m.object)
  554. if (m.object.geometry.type != "PlaneBufferGeometry") {
  555. console.log('onmousedown', 111)
  556. if (m.object.userData && m.object.userData.benchFlag == true) {
  557. if (!bool) {
  558. bool = true;
  559. //m.object.material = window.shader1;
  560. ////m.object.scale.set(10, 10, 10)
  561. //m.object.scale.set(5, 5, 5)
  562. //outlineObj(m.object)
  563. // let player = document.getElementById(domId)
  564. // player.style.display = "none
  565. if (box) {
  566. sdkInstance.sceneRenderer.scene.remove(box);
  567. }
  568. window.handleBenchClick(m.object.userData.benchId, m.object.userData.bShowRemoteButton)
  569. box = new THREE.BoxHelper(m.object, '#ff0000'); //object 模型
  570. sdkInstance.sceneRenderer.scene.add(box)
  571. //let ambientLight = new THREE.AmbientLight(0xffffff); //设置环境光
  572. //sdkInstance.sceneRenderer.scene.add(ambientLight); //将环境光添加到场景中
  573. //let pointLight = new THREE.PointLight(0xffffff, 1, 0);
  574. //pointLight.position.set(200, 200, 200); //设置点光源位置
  575. //sdkInstance.sceneRenderer.scene.add(pointLight); //将点光源添加至场景
  576. }
  577. //outlineObj(m.object
  578. //m.object.material = FXAAShader
  579. }
  580. } else if (m.object.geometry.type == "PlaneBufferGeometry") {
  581. console.log('onmousedown', 222)
  582. if (m.object.userData && m.object.userData.benchFlag == true) {
  583. window.handleListClick(m.object.userData.benchId)
  584. }
  585. }})
  586. bool = false;
  587. bool1 = false;
  588. }
  589. }
  590. canvas.onmousemove = (event) => {
  591. let mouse = new THREE.Vector2();
  592. let raycaster = new THREE.Raycaster();
  593. mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  594. mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
  595. raycaster.setFromCamera(mouse, sdkInstance.player.camera);
  596. let intersects = raycaster.intersectObjects(sdkInstance.sceneRenderer.scene.children);
  597. if (intersects && intersects.length > 0) {
  598. let bFirst = true;
  599. let bool = false;
  600. let bool1 = false;
  601. intersects.forEach(m => {
  602. if (m && m.object && (m.object.userData.type == 'water')) {
  603. console.log('===== bench selected =====')
  604. window.store.dispatch('benchList/setMouseOverBench', {
  605. bench_id: m.object.userData.benchId,
  606. pageX: event.x,
  607. pageY: event.y,
  608. status: true
  609. })
  610. } else {
  611. window.store.dispatch('benchList/setMouseOverBench', {
  612. bench_id: m.object.userData.benchId,
  613. pageX: event.x,
  614. pageY: event.y,
  615. status: false
  616. })
  617. }
  618. })
  619. bool = false;
  620. bool1 = false;
  621. }
  622. }
  623. return;
  624. let outlinePass = null;
  625. function outlineObj(selectedObjects) {
  626. composer = new THREE.EffectComposer(sdkInstance.sceneRenderer.renderer); // 特效组件
  627. var renderPass = new THREE.RenderPass(sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);
  628. composer.addPass(renderPass); // 特效渲染
  629. outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), sdkInstance.sceneRenderer.scene, sdkInstance.player.camera);
  630. composer.addPass(outlinePass); // 加入高光特效
  631. outlinePass.pulsePeriod = 2; //数值越大,律动越慢
  632. outlinePass.visibleEdgeColor.set(0xff0000); // 高光颜色
  633. outlinePass.hiddenEdgeColor.set(0x000000);// 阴影颜色
  634. outlinePass.usePatternTexture = true; // 使用纹理覆盖?
  635. outlinePass.edgeStrength = 5; // 高光边缘强度
  636. outlinePass.edgeGlow = 1; // 边缘微光强度
  637. outlinePass.edgeThickness = 1; // 高光厚度
  638. var textureLoader = new THREE.TextureLoader();
  639. textureLoader.load('../models/matcap.png', function (texture) {
  640. outlinePass.patternTexture = texture;
  641. texture.wrapS = THREE.RepeatWrapping;
  642. texture.wrapT = THREE.RepeatWrapping;
  643. outlinePass.selectedObjects = selectedObjects; // 需要高光的obj
  644. if (composer != null) {
  645. animate();
  646. }
  647. })
  648. }
  649. function animate() {
  650. requestAnimationFrame(animate);
  651. if (composer != null) {
  652. composer.render();
  653. }
  654. }
  655. });
  656. }
  657. sdkInstance.on("modeChange", function (currentMode, newMode) {
  658. if (newMode === "transitioning") {
  659. return;
  660. }
  661. console.log(newMode, '@@@@@@@@@@@@@')
  662. });
  663. });
  664. }