uwb-sample.js 24 KB

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