| | |
| | | import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' |
| | | import TWEEN from '@tweenjs/tween.js'; |
| | | |
| | | const help = false; |
| | | const help = true; |
| | | const debugCamera = { |
| | | x: 200, |
| | | y: 200, |
| | |
| | | this.stats = this.initStats(container); |
| | | this.windowResize(); |
| | | this.initRaycaster(container); |
| | | initLight(this.scene); |
| | | // initLight(this.scene); |
| | | |
| | | this.objects = []; |
| | | } |
| | |
| | | initScene = () => { |
| | | const scene = new THREE.Scene(); |
| | | // scene.background = new THREE.Color(0xf0f0f0); |
| | | // scene.background = new THREE.Color(0x333333); |
| | | scene.background = new THREE.Color(0x333333); |
| | | if (help) { |
| | | scene.add(new THREE.AxesHelper(1000)); |
| | | } |
| | |
| | | } |
| | | |
| | | initCamera = () => { |
| | | const camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 10000); |
| | | const camera = new THREE.PerspectiveCamera(70, this.fullWidth / this.fullHeight, 1, 10000); |
| | | camera.position.set(debugCamera.x, debugCamera.y, debugCamera.z); |
| | | this.scene.add(camera); |
| | | return camera; |
| | |
| | | // this.renderer.toneMapping = THREE.ReinhardToneMapping; |
| | | renderer.toneMapping = THREE.ACESFilmicToneMapping; |
| | | renderer.setPixelRatio(window.devicePixelRatio); |
| | | renderer.setSize(300, 500); |
| | | renderer.setSize(this.fullWidth, this.fullHeight); |
| | | container.appendChild(renderer.domElement); |
| | | return renderer; |
| | | } |
| | |
| | | windowResize = () => { |
| | | let that = this; |
| | | window.addEventListener('resize', function () { |
| | | that.camera.aspect = window.innerWidth / window.innerHeight; |
| | | that.camera.aspect = this.fullWidth / this.fullHeight; |
| | | that.camera.updateProjectionMatrix(); |
| | | that.renderer.setSize(that.fullWidth, that.fullHeight); |
| | | }, false); |
| | |
| | | } |
| | | |
| | | build = () => { |
| | | // 1.build floor |
| | | buildFloor(this.scene); |
| | | buildDemo(this.scene); |
| | | } |
| | | |
| | | handleClick = () => { |
| | |
| | | }; |
| | | |
| | | const initLight = (scene) => { |
| | | |
| | | const directionalLight = new THREE.DirectionalLight(0xffffff, 0.6); // 光颜色,强度 |
| | | directionalLight.position.set(1, 1, 1).normalize(); |
| | | scene.add(directionalLight); |
| | |
| | | scene.add(ambientLight); |
| | | |
| | | const spotLight = new THREE.SpotLight(0xffffff, 8); |
| | | spotLight.position.set(1617, 2500, 4022); |
| | | spotLight.position.set(0, 300, 0); |
| | | spotLight.angle = Math.PI * 1; |
| | | spotLight.decay = 0; |
| | | spotLight.castShadow = true; |
| | |
| | | spotLight.shadow.bias = - 0.000222; |
| | | spotLight.shadow.mapSize.width = 1024; |
| | | spotLight.shadow.mapSize.height = 1024; |
| | | |
| | | const targetObject = new THREE.Object3D(); |
| | | targetObject.position.set(1617, 0, 4022); |
| | | spotLight.target = targetObject; |
| | | |
| | | scene.add(spotLight); |
| | | |
| | | if (help) { |
| | | scene.add(new THREE.SpotLightHelper(spotLight)); |
| | | } |
| | | } |
| | | |
| | | const buildFloor = (scene) => { |
| | | const boxGeometry = new THREE.BoxGeometry(100, 100, 100); // 216为长度,10为宽度,10为高度 |
| | | const buildDemo = (scene) => { |
| | | const boxGeometry = new THREE.BoxGeometry(100, 100, 100); |
| | | const boxMaterial = new THREE.MeshBasicMaterial({ color: 0x40739e }); |
| | | const boxMesh = new THREE.Mesh(boxGeometry, boxMaterial); |
| | | boxMesh.position.set(0, 0, 0); // 根据你的需求设置位置 |
| | | boxMesh.position.set(0, 0, 0); |
| | | scene.add(boxMesh) |
| | | return boxMesh; |
| | | |
| | | const size = 100; |
| | | const divisions = 100; |
| | | const helper = new THREE.GridHelper(size, divisions); |
| | | helper.position.x = size / 2; |
| | | helper.position.z = size / 2; |
| | | helper.material.opacity = 0.25; |
| | | helper.material.transparent = true; |
| | | scene.add(helper); |
| | | return helper; |
| | | } |