| | |
| | | |
| | | import textureMapImage from '@/assets/map/texture/gz-map.jpg'; |
| | | import textureMapFxImage from '@/assets/map/texture/gz-map-fx.jpg'; |
| | | import { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js'; |
| | | |
| | | import gsap from 'gsap'; |
| | | |
| | | // 地图深度 |
| | | const MAP_DEPTH = 0.2; |
| | | |
| | |
| | | this.textureLoader = new THREE.TextureLoader(); |
| | | this.setTexture(); |
| | | this.operationData(mapData); |
| | | this.setLineHelper(); |
| | | setTimeout(() => { |
| | | this.enterAnimation(); |
| | | }, 500); |
| | | } |
| | | setTexture() { |
| | | const textureMap = this.textureLoader.load(textureMapImage); |
| | |
| | | this.provinceMeshList.push(mesh); |
| | | }); |
| | | } |
| | | // 合并mesh |
| | | // const mergedGeometry = mergeGeometries(province.children,true); |
| | | province.isHover = false; |
| | | this.map.add(province); |
| | | }); |
| | | this.map.position.set(1, 1, -1.5); |
| | | this.map.scale.set(10, 10, 10); |
| | | this.map.scale.set(10, 10, 1); |
| | | this.map.rotation.set(THREE.MathUtils.degToRad(-90), 0, THREE.MathUtils.degToRad(20)); |
| | | this.scene.add(this.map); |
| | | console.log(this.map); |
| | | |
| | | this.setMouseEvent(); |
| | | } |
| | | |
| | |
| | | |
| | | setMouseEvent() { |
| | | this.mouseEvent = this.handleEvent.bind(this); |
| | | // this.experience.canvas.addEventListener("mousemove", this.throttle(this.mouseEvent,100)); |
| | | this.experience.canvas.addEventListener("mousemove", this.mouseEvent); |
| | | } |
| | | |
| | |
| | | }) |
| | | } |
| | | |
| | | setLineHelper() { |
| | | const material = new THREE.LineBasicMaterial({ |
| | | color: 0x0000ff |
| | | }); |
| | | |
| | | const points = []; |
| | | points.push(new THREE.Vector3(0, 0, 0)); |
| | | points.push(new THREE.Vector3(0, 0, 0)); |
| | | |
| | | const geometry = new THREE.BufferGeometry().setFromPoints(points); |
| | | |
| | | this.lineHelper = new THREE.Line(geometry, material); |
| | | console.log(this.lineHelper); |
| | | this.scene.add(this.lineHelper); |
| | | } |
| | | |
| | | updateLine(raycaster) { |
| | | let pointArray = new Float32Array([ |
| | | raycaster.ray.origin.x, |
| | | raycaster.ray.origin.y, |
| | | raycaster.ray.origin.z, |
| | | raycaster.ray.direction.x, |
| | | raycaster.ray.direction.y, |
| | | raycaster.ray.direction.z, |
| | | ]) |
| | | this.lineHelper.geometry.attributes.position.array = pointArray; |
| | | this.lineHelper.geometry.attributes.position.needsUpdate = true; |
| | | enterAnimation() { |
| | | gsap.to(this.map.scale, { |
| | | z: 10, |
| | | duration: 0.6, |
| | | ease: 'power1.out' |
| | | }) |
| | | } |
| | | } |