import {OrbitControls} from './lib/OrbitControls.js'; import Stats from './lib/stats.module.js'; import {MTLLoader} from './lib/MTLLoader.js'; import {OBJLoader} from './lib/OBJLoader.js'; var APP = { Player: function () { this.dom = null; this.scene = null;//场景 this.camera = null;//相机 this.renderer = null;//渲染器 this.objects = [];//场景中所有对象的集合 this.firstTime = 1; this.stats = null; this.goodTypes=[];//存储所有的库位类型 this.start = function () { this.initMain(); this.animate(); } this.initMain = function () { this.initScene(); this.initCamera(); this.initRenderer(); this.initOrbitControl(); this.initBackground(); this.initStats(); this.initLight(); this.initFloor(); this.initModel(); // 取数据 this.initStoreData(); } this.animate = function () { requestAnimationFrame(this.animate.bind(this)); this.stats.begin(); this.renderer.render(this.scene, this.camera); this.stats.end(); this.initStoreObjects(this); this.modelMove(); } this.initScene = function () { this.scene = new THREE.Scene(); } this.initCamera = function () { //声明一个透视相机, // 视角:60, // 纵横比aspect:全屏,使用的是浏览器的宽度/高度 //近平面near:0.1 //远平面视角far:10000 this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 50000); /* 设置相机位置,注意threejs中的坐标系采用的是右手坐标系 */ // this.camera.position.x = 0; // this.camera.position.y = 1000; // this.camera.position.z = 600; // //相机的朝向 // this.camera.lookAt(0, 0, 0); this.camera.position.set( - 550, 670, 950 ); this.camera.lookAt( this.scene.position ); //将相机放到场景中 this.scene.add(this.camera); } this.initRenderer = function () { this.renderer = new THREE.WebGLRenderer(); // this.renderer.physicallyCorrectLights = true; // this.renderer.outputEncoding = THREE.sRGBEncoding; // this.renderer.shadowMap.enabled = true; // this.renderer.toneMapping = THREE.ReinhardToneMapping; this.renderer.setPixelRatio( window.devicePixelRatio ); this.renderer.setSize( window.innerWidth, window.innerHeight ); this.dom = document.getElementById("container"); this.dom.appendChild( this.renderer.domElement ); } this.initLight = function () { // --- var bulbLight = new THREE.PointLight( 0xffee88, 1, 2000, 2 ); bulbLight.position.set( 600, 600, 500 ); bulbLight.castShadow = true; bulbLight.power = 100; this.addObject(bulbLight); // --- // var bulbLight1 = new THREE.PointLight( 0xffee88, 1, 2000, 2 ); // bulbLight1.position.set( -600, 600, 500 ); // bulbLight1.castShadow = true; // bulbLight1.power = 100; // this.addObject(bulbLight1); // // --- // var bulbLight2 = new THREE.PointLight( 0xffee88, 1, 2000, 2 ); // bulbLight2.position.set( 600, 600, -500 ); // bulbLight2.castShadow = true; // bulbLight2.power = 100; // this.addObject(bulbLight2); // // --- // var bulbLight3 = new THREE.PointLight( 0xffee88, 1, 2000, 2 ); // bulbLight3.position.set( -600, 600, -500 ); // bulbLight3.castShadow = true; // bulbLight3.power = 100; // this.addObject(bulbLight3); // // --- // var hemiLight = new THREE.HemisphereLight( 0xddeeff, 0x0f0e0d, 0.02 ); // hemiLight.intensity = 0.0001; // this.addObject(hemiLight); const ambientLight = new THREE.AmbientLight( 0xcccccc, 0.4 ); this.addObject( ambientLight ); const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.6 ); directionalLight.position.set( - 1, 1, 1 ); this.addObject( directionalLight ); } this.initOrbitControl = function () { this.orbitControl = new OrbitControls(this.camera, this.renderer.domElement); this.orbitControl.enableDamping = true; this.orbitControl.dampingFactor = 0.5; // 视角最小距离 this.orbitControl.minDistance = 0; // 视角最远距离 this.orbitControl.maxDistance = 10000; // 最大角度 //this.orbitControl.maxPolarAngle = Math.PI / 2.2; } this.initStats = function () { this.stats = new Stats(); // this.dom.appendChild( this.stats.dom ); } this.initBackground = function () { const cubeTextureLoader = new THREE.CubeTextureLoader(); cubeTextureLoader.setPath( '../static/img/background/' ); this.scene.background = cubeTextureLoader.load([ "posx.jpg", "negx.jpg", "posy.jpg", "negy.jpg", "posz.jpg", "negz.jpg" ]); this.scene.background = new THREE.Color( 0x17c5dc ); } this.removeObject = function (nameorid) { for (let i = 0; i < this.objects.length; i++) { let tmpObject = this.objects[i]; if (tmpObject.name === nameorid || tmpObject.id === nameorid) { this.objects.splice(i, 1); this.scene.remove(tmpObject); } } } this.addObject = function (object) { this.scene.add(object); this.objects.push(object); } this.initFloor = function() { // const planeGeometry = new THREE.PlaneGeometry( 2000, 2000 ); // planeGeometry.rotateX( - Math.PI / 2 ); // const planeMaterial = new THREE.ShadowMaterial( { opacity: 0.2 } ); // const plane = new THREE.Mesh( planeGeometry, planeMaterial ); // plane.position.y = - 200; // plane.receiveShadow = true; // this.addObject(plane); // // const helper = new THREE.PolarGridHelper( 2000, 100 ); const helper = new THREE.GridHelper( 5000, 300 ); helper.position.y = - 0; helper.material.opacity = 0.25; helper.material.transparent = true; this.addObject( helper ); } this.initStoreObjects = function (object) { if (this.firstTime === 1) { // initStore(); if (Store3DData !== null) { for(let i = 0;i