123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import * as THREE from 'three';
- import UseThree from '../../../../utils/threejs/useThree';
- import ChamberBase from './grout.threejs.base';
- import BertaiBase from './bertai.threejs.base'; //lxh
- import { animateCamera } from '/@/utils/threejs/util';
- import useEvent from '../../../../utils/threejs/useEvent';
- // 模型对象、 文字对象
- let model: UseThree | undefined,
- groutBaseObj: ChamberBase | undefined,
- BertaiObj: BertaiBase | undefined, //lxh
- group: THREE.Object3D | undefined,
- // groutType = 'groutBase'; // workerFaceFiber
- groutType = 'bertaiBase'; // workerFaceFiber
- const { mouseDownFn } = useEvent();
- // 鼠标点击事件
- const mouseEvent = (event) => {
- if (event.button == 0) {
- mouseDownFn(<UseThree>model, <THREE.Object3D>group, event, (intersects) => {
- if (groutType === 'groutBase') {
- // groutBaseObj.mousedownModel.call(groutBaseObj, model.rayCaster);
- } else if (groutType === 'bertaiBase') {
- //lxh
- // BertaiObj.mousedownModel.call(BertaiObj, model.rayCaster);
- }
- });
- console.log('摄像头控制信息', model?.orbitControls, model?.camera);
- }
- };
- const addMouseEvent = () => {
- // 定义鼠标点击事件
- model?.canvasContainer?.addEventListener('mousedown', mouseEvent);
- };
- // const render = () => {
- // if (model && model.isRender) {
- // model.animationId = requestAnimationFrame(render);
- // model.css3dRender?.render(model.scene as THREE.Scene, model.camera as THREE.PerspectiveCamera);
- // model.stats?.update();
- // }
- // };
- export const addChamberText = (selectData) => {
- if (groutType === 'groutBase') {
- return groutBaseObj?.addChamberText.call(groutBaseObj, selectData);
- } else if (groutType == 'bertaiBase') {
- //lxh
- return BertaiObj?.addChamberText.call(BertaiObj, selectData);
- }
- };
- // 切换模型类型
- export const setModelType = (type) => {
- groutType = type;
- return new Promise((resolve) => {
- if (groutType === 'groutBase' && groutBaseObj && groutBaseObj.group) {
- group = groutBaseObj.group;
- const oldCameraPosition = { x: -114.7969, y: 104.0741, z: 303.516 };
- model?.scene?.add(groutBaseObj.group);
- setTimeout(async () => {
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: -36.224455845316, y: 21.749986776845592, z: -0.10614789855468158 },
- { x: 0, y: 0, z: 0 },
- model,
- 0.6
- );
- }, 300);
- resolve(null);
- } else if (groutType === 'bertaiBase' && BertaiObj && BertaiObj.group) {
- //lxh
- group = BertaiObj.group;
- const oldCameraPosition = { x: -114.7969, y: 104.0741, z: 303.516 };
- model?.scene?.add(BertaiObj.group);
- setTimeout(async () => {
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: 0.06216, y: 17.7679, z: 20.28977 },
- { x: 0.12544, y: 2.18736, z: -1.30608 },
- model,
- 0.6
- );
- }, 300);
- resolve(null);
- }
- });
- };
- export const mountedThree = () => {
- return new Promise(async (resolve) => {
- model = new UseThree('#grout3D');
- model.setEnvMap('test1.hdr');
- model.renderer.toneMappingExposure = 1.0;
- model?.camera?.position.set(100, 0, 600);
- groutBaseObj = new ChamberBase(model);
- await groutBaseObj.mountedThree();
- BertaiObj = new BertaiBase(model); //lxh
- await BertaiObj.mountedThree(); //lxh
- addMouseEvent();
- model.animate();
- resolve(null);
- });
- };
- export const destroy = () => {
- if (model) {
- model.isRender = false;
- console.log('场景销毁前信息----------->', model.renderer?.info);
- groutBaseObj?.destroy();
- groutBaseObj = undefined;
- BertaiObj?.destroy();
- BertaiObj = undefined;
- group = undefined;
- model.destroy();
- model = undefined;
- }
- };
|