chamber.threejs.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import * as THREE from 'three';
  2. import UseThree from '../../../../utils/threejs/useThree';
  3. import ChamberBase from './chamber.threejs.base';
  4. import { animateCamera, setModalCenter } from '/@/utils/threejs/util';
  5. import useEvent from '../../../../utils/threejs/useEvent';
  6. // 模型对象、 文字对象
  7. let model,
  8. chamberBaseObj: ChamberBase,
  9. group,
  10. chamberType = 'chamberBase';
  11. const { mouseDownFn } = useEvent();
  12. // 鼠标点击事件
  13. const mouseEvent = (event) => {
  14. mouseDownFn(model, group, event, (intersects) => {
  15. if (chamberType === 'chamberBase') {
  16. // chamberBaseObj.mousedownModel.call(chamberBaseObj, intersects);
  17. }
  18. });
  19. console.log('摄像头控制信息', model.orbitControls, model.camera);
  20. };
  21. const addMouseEvent = () => {
  22. // 定义鼠标点击事件
  23. model.canvasContainer?.addEventListener('mousedown', mouseEvent.bind(null));
  24. };
  25. const render = () => {
  26. if (model.animationId != -1) {
  27. model.animationId = requestAnimationFrame(render);
  28. model.css3dRender?.render(model.scene as THREE.Scene, model.camera as THREE.PerspectiveCamera);
  29. model.stats?.update();
  30. }
  31. };
  32. export const addChamberText = (selectData) => {
  33. if (chamberType === 'chamberBase') {
  34. // return chamberBaseObj.addChamberText.call(chamberBaseObj, selectData);
  35. }
  36. };
  37. // 切换模型类型
  38. export const setModelType = (type) => {
  39. chamberType = type;
  40. return new Promise((resolve) => {
  41. if (chamberType === 'chamberBase') {
  42. group = chamberBaseObj.group;
  43. const oldCameraPosition = { x: 124.736, y: 63.486, z: 103.337 };
  44. model.scene.add(chamberBaseObj.group);
  45. setModalCenter(model.scene);
  46. model.camera.position.set(0, 0, 300);
  47. setTimeout(async () => {
  48. await animateCamera(
  49. oldCameraPosition,
  50. {x: 0, y: 0, z: 0},
  51. { x: 11.19, y: 400.13, z: 344.20 },
  52. { x: 10.446, y: 0.875, z: -0.993 },
  53. model,
  54. 0.8
  55. );
  56. }, 300);
  57. resolve(null);
  58. }
  59. });
  60. };
  61. export const mountedThree = () => {
  62. return new Promise(async (resolve) => {
  63. model = new UseThree('#chamber3D');
  64. model.setEnvMap('test1');
  65. model.renderer.toneMappingExposure = 1;
  66. // model.camera.position.set(100, 0, 1000);
  67. chamberBaseObj = new ChamberBase(model);
  68. await chamberBaseObj.mountedThree();
  69. // model.scene.add(chamberBaseObj.group);
  70. addMouseEvent();
  71. // render();
  72. model.animate();
  73. resolve(null);
  74. });
  75. };
  76. export const destroy = () => {
  77. if (model) {
  78. chamberBaseObj.destroy();
  79. model.deleteModal();
  80. model = null;
  81. group = null;
  82. chamberBaseObj = null;
  83. }
  84. };