From 2b614e6d62537a09cf51654c80f0f08dc14ee1ad Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期一, 03 一月 2022 16:58:50 +0800
Subject: [PATCH] #

---
 static/js/app.js |  195 ++++++++++++++++++++++++++----------------------
 1 files changed, 105 insertions(+), 90 deletions(-)

diff --git a/static/js/app.js b/static/js/app.js
index 79b5599..0812f26 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -1,11 +1,17 @@
 import {OrbitControls} from './lib/OrbitControls.js';
 import { PointerLockControls } from './lib/PointerLockControls.js';
 import Stats from './lib/stats.module.js';
+import { EffectComposer } from './lib/EffectComposer.js';
+import { RenderPass } from './lib/postprocessing/RenderPass.js';
+import { ShaderPass } from './lib/postprocessing/ShaderPass.js';
+import { OutlinePass } from './lib/postprocessing/OutlinePass.js';
+import { FXAAShader } from './lib/postprocessing/FXAAShader.js';
 import {MTLLoader} from './lib/MTLLoader.js';
 import {OBJLoader} from './lib/OBJLoader.js';
 import {StoreShelf} from './object/StoreShelf.js';
 import {StoreCrn} from './object/StoreCrn.js';
-import { Sky } from './object/Sky.js';
+import {StoreConvey} from './object/StoreConvey.js';
+
 
 
 var APP = {
@@ -18,6 +24,7 @@
 		this.objects = [];//鍦烘櫙涓墍鏈夊璞$殑闆嗗悎
 		this.firstTime = 1;
 		this.stats = null;
+		this.outlinePass = null;
 		this.goodTypes=[];//瀛樺偍鎵�鏈夌殑搴撲綅绫诲瀷
 		this.crnTasks = [];// 鍫嗗灈鏈哄垪琛�
 		this.moveForward = false;//鏄惁鍚戝墠杩愯
@@ -29,7 +36,7 @@
 		this.direction = new THREE.Vector3();
 		this.raycaster = null;
 		this.prevTime = performance.now();//涓婁竴娆ender鐨勬椂闂�
-		this.backgroundType = false;
+		this.backgroundType = true;
 
 		this.start = function () {
 			this.initMain();
@@ -44,13 +51,22 @@
 			this.initStats();
 			this.initLight();
 			this.initReSize(this);
+			this.initOutLine();
+			// this.initComposer();
+			this.initObjectSelect();
 			this.initPointLockControl(this);
 			this.initFloor();
+			this.initBuilding();
+			this.initConvey();
 		}
 		this.animate = function () {
 			requestAnimationFrame(this.animate.bind(this));
 			this.stats.begin();
-			this.renderer.render(this.scene, this.camera);
+			if (this.composer) {
+				this.composer.render();
+			} else {
+				this.renderer.render(this.scene, this.camera);
+			}
 			this.firstPersonMove();
 			this.initStoreObjects(this);
 			this.stats.end();
@@ -62,80 +78,45 @@
 		}
 		this.initCamera = function () {
 			if (this.camera === null) {
-				//澹版槑涓�涓�忚鐩告満锛�
-				// 瑙嗚锛�60锛�
-				// 绾垫í姣攁spect:鍏ㄥ睆锛屼娇鐢ㄧ殑鏄祻瑙堝櫒鐨勫搴�/楂樺害
-				//杩戝钩闈ear锛�0.1
-				//杩滃钩闈㈣瑙抐ar:10000
 				this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 50000);
-				/*
-                璁剧疆鐩告満浣嶇疆锛屾敞鎰弔hreejs涓殑鍧愭爣绯婚噰鐢ㄧ殑鏄彸鎵嬪潗鏍囩郴
-                 */
-				// 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( - 350, 1070, 1550 );
+				this.camera.position.set( -350, 600, 1100 );
 				this.camera.lookAt( this.scene.position );
 				//灏嗙浉鏈烘斁鍒板満鏅腑
 				this.scene.add(this.camera);
 			} else {
-				this.camera.position.set( - 350, 1070, 1550 );
+				this.camera.position.set( -350, 600, 1100 );
 				this.camera.lookAt( this.scene.position );
 			}
 		}
 		this.initRenderer = function () {
-			this.renderer = new THREE.WebGLRenderer();
-
-			// this.renderer.outputEncoding = THREE.sRGBEncoding;
-			// this.renderer.toneMapping = THREE.ACESFilmicToneMapping;
-			// this.renderer.toneMappingExposure = 0.5;
-
-			// this.renderer.outputEncoding = THREE.sRGBEncoding;
-			// this.renderer.shadowMap.enabled = true;
-			// this.renderer.toneMapping = THREE.ReinhardToneMapping;
-			//
+			this.renderer = new THREE.WebGLRenderer({
+				antialias: true,
+				logarithmicDepthBuffer: true
+			});
+			// this.renderer.toneMapping = THREE.CineonToneMapping;	// 鑹茶皟
+			this.renderer.setSize(window.innerWidth, window.innerHeight);
 			this.renderer.setPixelRatio( window.devicePixelRatio );
-			this.renderer.setSize( window.innerWidth, window.innerHeight );
+			this.renderer.shadowMap.enabled = true;
+			this.renderer.shadowMap.type = THREE.BasicShadowMap;
 			this.dom = document.getElementById("container");
-			this.dom.appendChild( this.renderer.domElement );
-
+			this.dom.appendChild(this.renderer.domElement);
 
 		}
 		this.initLight = function () {
-
 			//棣栧厛娣诲姞涓幆澧冨厜
 			let ambient = new THREE.AmbientLight(0xffffff, 1); //AmbientLight,褰卞搷鏁翠釜鍦烘櫙鐨勫厜婧�
 			ambient.position.set(0, 0, 0);
 			this.addObject(ambient);
-			//娣诲姞骞宠鍏�,骞宠鍏夌被浼间簬澶槼鍏�
-			let directionalLight = new THREE.DirectionalLight(0xffffff, 0.3);//妯℃嫙杩滃绫讳技澶槼鐨勫厜婧�
-			directionalLight.position.set(0, 200, 0);
-			this.addObject(directionalLight);
-			//璁剧疆鐐瑰厜婧�
-			let pointLight1 = new THREE.PointLight(0xffffff, 0.3);
-			pointLight1.position.set(-500, 200, 0);
-			this.addObject(pointLight1);
-			let pointLight2 = new THREE.PointLight(0xffffff, 0.3);
-			pointLight2.position.set(500, 200, 0);
-			this.addObject(pointLight2);
 
-			// const bulbGeometry = new THREE.SphereGeometry( 0.02, 16, 8 );
-			// var bulbLight = new THREE.PointLight( 0xffee88, 1, 100, 2 );
-			//
-			// var bulbMat = new THREE.MeshStandardMaterial( {
-			// 	emissive: 0xffffee,
-			// 	emissiveIntensity: 1,
-			// 	color: 0x000000
-			// } );
-			// bulbLight.add( new THREE.Mesh( bulbGeometry, bulbMat ) );
-			// bulbLight.position.set( -500, 22, 0 );
-			// bulbLight.castShadow = true;
-			// this.addObject( bulbLight );
-			//
-			// var hemiLight = new THREE.HemisphereLight( 0xddeeff, 0x0f0e0d, 0.02 );
-			// this.addObject( hemiLight );
+			// 闃村奖鑱氬厜鐏�
+			let pointLight = new THREE.SpotLight(0xFFFAFA,1);
+			pointLight.position.set(0, 1500, 2500);
+			pointLight.castShadow = true;
+			pointLight.shadow.camera.near = 2000;
+			pointLight.shadow.camera.far = 10000;
+			pointLight.shadow.mapSize.height = 200000;
+			pointLight.shadow.mapSize.width = 200000;
+			this.addObject(pointLight);
 		}
 		this.initOrbitControl = function () {
 			this.orbitControl = new OrbitControls(this.camera, this.renderer.domElement);
@@ -155,7 +136,8 @@
 		}
 		this.initBackground = function () {
 			if (this.backgroundType) {
-				this.scene.background = new THREE.Color( 0xf0f0f0 );
+				// this.scene.background = new THREE.Color( 0xf0f0f0 );
+				this.scene.background = new THREE.Color( 0x333333 );
 			} else {
 				const cubeTextureLoader = new THREE.CubeTextureLoader();
 				cubeTextureLoader.setPath( '../static/img/skybox0/' );
@@ -165,29 +147,6 @@
 					"pz.jpg", "nz.jpg"
 				]);
 			}
-			// 澶槼
-			// let sky = new Sky();
-			// sky.scale.setScalar( 450000 );
-			// this.addObject( sky );
-			// let sun = new THREE.Vector3();
-			// const effectController = {
-			// 	turbidity: 10,
-			// 	rayleigh: 3,
-			// 	mieCoefficient: 0.005,
-			// 	mieDirectionalG: 0.7,
-			// 	elevation: 2,
-			// 	azimuth: 180,
-			// 	exposure: this.renderer.toneMappingExposure
-			// };
-			// const uniforms = sky.material.uniforms;
-			// uniforms[ 'turbidity' ].value = effectController.turbidity;
-			// uniforms[ 'rayleigh' ].value = effectController.rayleigh;
-			// uniforms[ 'mieCoefficient' ].value = effectController.mieCoefficient;
-			// uniforms[ 'mieDirectionalG' ].value = effectController.mieDirectionalG;
-			// const phi = THREE.MathUtils.degToRad( 90 - effectController.elevation );
-			// const theta = THREE.MathUtils.degToRad( effectController.azimuth );
-			// sun.setFromSphericalCoords( 1, phi, theta );
-			// uniforms[ 'sunPosition' ].value.copy( sun );
 		}
 		this.initReSize = function(object){
 			window.addEventListener('resize', function () {
@@ -196,9 +155,33 @@
 				object.renderer.setSize(window.innerWidth, window.innerHeight);
 			}, false);
 		}
+		this.initOutLine = function(){
+			this.outlinePass = new OutlinePass( new THREE.Vector2( window.innerWidth, window.innerHeight ), this.scene, this.camera )
+			// this.outlinePass.edgeStrength = 1;//鍖呭洿绾挎祿搴�
+			// this.outlinePass.edgeGlow = 0.1;//杈圭紭绾胯寖鍥�
+			// this.outlinePass.edgeThickness = 1;//杈圭紭绾挎祿搴�
+			// this.outlinePass.pulsePeriod = 2;//鍖呭洿绾块棯鐑佽瘎鐜�
+			// this.outlinePass.visibleEdgeColor.set('#B31985');//鍖呭洿绾块鑹�
+			// this.outlinePass.hiddenEdgeColor.set('#190a05');//琚伄鎸$殑杈圭晫绾块鑹�
+		}
+		this.initComposer = function(){
+			this.composer = new EffectComposer(this.renderer);
+			const renderPass = new RenderPass( this.scene, this.camera );
+			this.composer.addPass( renderPass );
+			this.composer.addPass(this.outlinePass);
+
+			const pixelRatio = this.renderer.getPixelRatio();
+			this.fxaaPass = new ShaderPass( FXAAShader );
+			this.fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / ( this.dom.offsetWidth * pixelRatio );
+			this.fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / ( this.dom.offsetHeight * pixelRatio );
+			this.composer.addPass( this.fxaaPass );
+		}
+		this.initObjectSelect = function(){
+			new ObjectSelect(this.scene, this.camera, this.outlinePass);
+		}
 		this.initPointLockControl = function(object){
 			this.controls = new PointerLockControls( this.camera, document.body );
-			this.raycaster = new THREE.Raycaster( new THREE.Vector3(), new THREE.Vector3( 0, - 1, 0 ), 0, 10 );
+			this.raycaster = new THREE.Raycaster( new THREE.Vector3(), new THREE.Vector3( 0, - 1, 0 ), 0,  50 );
 
 			const onKeyDown = function ( event ) {
 				switch ( event.code ) {
@@ -316,13 +299,31 @@
 
 			// const helper = new THREE.PolarGridHelper( 2000, 100 );
 
-			const helper = new THREE.GridHelper( 8000, 300 );
-			helper.position.y = - 0;
+			const helper = new THREE.GridHelper( 8000, 300);
+			helper.position.x = 1200;
+			helper.position.y = - 1;
+			helper.position.z = -2000;
 			helper.material.opacity = 0.25;
 			helper.material.transparent = true;
 			this.addObject( helper );
 
 			// this.addObject(new Floor({position: {}}))
+		}
+		this.initBuilding = function () {
+			let buildingData = buildingObjects.objects;
+			for (let i = 0; i < buildingData.length; i++) {
+				let objectOption = buildingData[i];
+				switch (objectOption.objectType) {
+					case "cube":
+						let cube = new Cube(objectOption);
+						this.addObject(cube);
+						break;
+				}
+			}
+		}
+		this.initConvey = function () {
+			let storeConvey = new StoreConvey(this, conveyObjects.objects)
+			storeConvey.load();
 		}
 		this.initStoreObjects = function (object) {
 			if (this.firstTime === 1) {
@@ -360,7 +361,6 @@
 						this.crnTasks.push(new CrnTask(crnData, this));
 					} else {
 						if(!crnTask.run) {
-							// console.log(2)
 							crnTask.modify(crnData);
 						}
 					}
@@ -396,12 +396,27 @@
 		}
 		this.lockControl = function () {
 			this.camera.position.y = 100;
-			this.camera.lookAt(0,100,0);
-			this.controls.getObject().position.x =0;
-			this.controls.getObject().position.y =100;
-			this.controls.getObject().position.z =580;
+			this.camera.lookAt(900,1100,0);
+			this.controls.getObject().position.x = -200;
+			this.controls.getObject().position.y = 200;
+			this.controls.getObject().position.z = 200;
 			this.controls.lock();
 		}
+		this.mainView = function () {
+			this.camera.position.set( 1400, 400, 2000 );
+			this.camera.lookAt( 1400, 500, 0 );
+		}
+		this.leftView = function () {
+			this.camera.position.set( -3000, 300, -2000 );
+			this.camera.lookAt(0, 500, -2000);
+		}
+		this.verticalView = function () {
+			this.camera.position.set( 1400, 6000, -1800 );
+			this.camera.lookAt( 1400, 0, -1800 );
+		}
+		this.backlView = function () {
+			this.initCamera();
+		}
 	},
 
 };

--
Gitblit v1.9.1