| | |
| | | import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass'; |
| | | import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass'; |
| | | import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader'; |
| | | |
| | | import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader' |
| | | import * as Utils from '../../utils' |
| | | |
| | | const help = false; |
| | | |
| | |
| | | controls.minPolarAngle = 0; // 最小俯仰角度(向下看) |
| | | controls.maxPolarAngle = Math.PI / 2.1; // 最大俯仰角度(向上看) |
| | | controls.rotateSpeed = 0.6; // 视角移动速度减慢 |
| | | controls.autoRotate = false; // 自动旋转 |
| | | controls.autoRotate = true; // 自动旋转 |
| | | |
| | | controls.target = new THREE.Vector3(0, 250, 0) // 屏幕中心点 平替 camera的lookAt |
| | | return controls; |
| | |
| | | if (intersects.length === 0) { |
| | | return; |
| | | } |
| | | this.outlinePass.selectedObjects = [intersects[0].object]; |
| | | let objName = intersects[0].object.name; |
| | | this.objects.forEach(obj => { |
| | | if (obj.name === objName) { |
| | | this.outlinePass.selectedObjects = [obj]; |
| | | } |
| | | }) |
| | | if (objName && this.handleClick) { |
| | | this.handleClick(objName, x, y); |
| | | } |
| | |
| | | } |
| | | |
| | | generateMesh = (fn) => { |
| | | fn(this.addObject); |
| | | // fn(this.addObject); |
| | | const loader = new FBXLoader(); |
| | | const promise = new Promise((resolve) => { |
| | | loader.load('model/001-5.fbx', (mesh) => { |
| | | mesh.position.set(0, 10, 0); |
| | | mesh.scale.set(5, 5, 5); |
| | | mesh.name = '1-1-1'; |
| | | // mesh.rotation.x = Utils.rotationParseNum(270); |
| | | mesh.traverse(function (child) { |
| | | if (child.isMesh) { |
| | | child.name = '1-1-1'; |
| | | child.castShadow = true; |
| | | child.receiveShadow = true; |
| | | } |
| | | }); |
| | | this.addObject(mesh); |
| | | resolve(); |
| | | }) |
| | | }) |
| | | return promise; |
| | | } |
| | | |
| | | setNewSelectedMesh = (objName) => { |
| | | for (const mesh of this.objects) { |
| | | if (mesh.name === objName) { |
| | | this.outlinePass.selectedObjects = [mesh]; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | destroy = () => { |
| | |
| | | directionalLight.position.set(1, 1, 1); |
| | | scene.add(directionalLight); |
| | | |
| | | const ambientLight = new THREE.AmbientLight(0xf0f0f0, 18); |
| | | const ambientLight = new THREE.AmbientLight(0xf0f0f0, 10); |
| | | scene.add(ambientLight); |
| | | |
| | | const spotLight = new THREE.SpotLight(0xffffff, 8); |