From aae6c45254e44b09b1183fd83b3fd7c5a480ea37 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期一, 20 十二月 2021 16:50:23 +0800
Subject: [PATCH] #
---
static/js/app.js | 478 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 338 insertions(+), 140 deletions(-)
diff --git a/static/js/app.js b/static/js/app.js
index 88fc6cb..450a51e 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -1,7 +1,12 @@
import {OrbitControls} from './lib/OrbitControls.js';
+import { PointerLockControls } from './lib/PointerLockControls.js';
import Stats from './lib/stats.module.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';
+
var APP = {
@@ -14,6 +19,17 @@
this.firstTime = 1;
this.stats = null;
this.goodTypes=[];//瀛樺偍鎵�鏈夌殑搴撲綅绫诲瀷
+ this.crnTasks = [];// 鍫嗗灈鏈哄垪琛�
+ this.moveForward = false;//鏄惁鍚戝墠杩愯
+ this.moveBackward = false;//鏄惁鍚戝悗杩愯
+ this.moveLeft = false;//鏄惁鍚戝乏杩愯
+ this.moveRight = false;//鏄惁鍚戝彸杩愯
+ this.canJump = false;//鏄惁鍙互璺�
+ this.velocity = new THREE.Vector3();
+ this.direction = new THREE.Vector3();
+ this.raycaster = null;
+ this.prevTime = performance.now();//涓婁竴娆ender鐨勬椂闂�
+ this.backgroundType = true;
this.start = function () {
this.initMain();
@@ -27,86 +43,100 @@
this.initBackground();
this.initStats();
this.initLight();
+ this.initReSize(this);
+ this.initPointLockControl(this);
this.initFloor();
- // this.initModel();
+ this.initModel();
+ this.initStoreObjects(this);
}
this.animate = function () {
requestAnimationFrame(this.animate.bind(this));
this.stats.begin();
this.renderer.render(this.scene, this.camera);
+ this.firstPersonMove();
this.stats.end();
- this.initStoreObjects(this);
+ this.queryCrn();
+ this.crnMove();
}
this.initScene = function () {
this.scene = new THREE.Scene();
}
this.initCamera = function () {
- //澹版槑涓�涓�忚鐩告満锛�
- // 瑙嗚锛�60锛�
- // 绾垫í姣攁spect:鍏ㄥ睆锛屼娇鐢ㄧ殑鏄祻瑙堝櫒鐨勫搴�/楂樺害
- //杩戝钩闈ear锛�0.1
- //杩滃钩闈㈣瑙抐ar:10000
- this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 10000);
- /*
- 璁剧疆鐩告満浣嶇疆锛屾敞鎰弔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( - 550, 670, 950 );
- this.camera.lookAt( this.scene.position );
- //灏嗙浉鏈烘斁鍒板満鏅腑
- this.scene.add(this.camera);
+ 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.lookAt( this.scene.position );
+ //灏嗙浉鏈烘斁鍒板満鏅腑
+ this.scene.add(this.camera);
+ } else {
+ this.camera.position.set( - 350, 1070, 1550 );
+ this.camera.lookAt( this.scene.position );
+ }
}
this.initRenderer = function () {
this.renderer = new THREE.WebGLRenderer();
- // this.renderer.physicallyCorrectLights = true;
+
+ // 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.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);
- // // ---
+
+ //棣栧厛娣诲姞涓幆澧冨厜
+ 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 );
- // 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.addObject( hemiLight );
}
this.initOrbitControl = function () {
this.orbitControl = new OrbitControls(this.camera, this.renderer.domElement);
@@ -122,16 +152,152 @@
this.initStats = function () {
this.stats = new Stats();
this.dom.appendChild( this.stats.dom );
+ this.stats.domElement.style.display = 'none';
}
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( 0xf0f0f0 );
+ if (this.backgroundType) {
+ this.scene.background = new THREE.Color( 0xf0f0f0 );
+ } else {
+ const cubeTextureLoader = new THREE.CubeTextureLoader();
+ cubeTextureLoader.setPath( '../static/img/skybox/' );
+ this.scene.background = cubeTextureLoader.load([
+ "px.jpg", "nx.jpg",
+ "py.jpg", "ny.jpg",
+ "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 () {
+ object.camera.aspect = window.innerWidth / window.innerHeight;
+ object.camera.updateProjectionMatrix();
+ object.renderer.setSize(window.innerWidth, window.innerHeight);
+ }, false);
+ }
+ 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 );
+
+ const onKeyDown = function ( event ) {
+ switch ( event.code ) {
+ case 'ArrowUp':
+ case 'KeyW':
+ object.moveForward = true;
+ break;
+ case 'ArrowLeft':
+ case 'KeyA':
+ object.moveLeft = true;
+ break;
+ case 'ArrowDown':
+ case 'KeyS':
+ object.moveBackward = true;
+ break;
+ case 'ArrowRight':
+ case 'KeyD':
+ object.moveRight = true;
+ break;
+ case 'Space':
+ if ( object.canJump === true ) {
+ object.velocity.y += 450;
+ }
+ object.canJump = false;
+ break;
+ }
+ };
+
+ const onKeyUp = function ( event ) {
+ switch ( event.code ) {
+ case 'ArrowUp':
+ case 'KeyW':
+ object.moveForward = false;
+ break;
+ case 'ArrowLeft':
+ case 'KeyA':
+ object.moveLeft = false;
+ break;
+ case 'ArrowDown':
+ case 'KeyS':
+ object.moveBackward = false;
+ break;
+ case 'ArrowRight':
+ case 'KeyD':
+ object.moveRight = false;
+ break;
+ }
+ };
+ this.controls.addEventListener( 'lock', function () {
+ console.log("绗竴浜虹О瑙嗚")
+ } );
+ this.controls.addEventListener( 'unlock', function () {
+ console.log("涓婂笣瑙嗚");
+ object.initCamera();
+ } );
+ document.addEventListener( 'keydown', onKeyDown );
+ document.addEventListener( 'keyup', onKeyUp );
+
+ this.addObject( this.controls.getObject() );
+ }
+ this.firstPersonMove=function(){
+ const time = performance.now();
+ if ( this.controls.isLocked === true ) {
+ this.raycaster.ray.origin.copy( this.controls.getObject().position );
+ this.raycaster.ray.origin.y -= 10;
+ const intersections = this.raycaster.intersectObjects( this.objects, false );
+ const onObject = intersections.length > 0;
+ const delta = ( time - this.prevTime ) / 1000;
+ this.velocity.x -= this.velocity.x * 10.0 * delta;
+ this.velocity.z -= this.velocity.z * 10.0 * delta;
+ this.velocity.y -= 9.8 * 100.0 * delta; // 100.0 = mass
+ this.direction.z = Number( this.moveForward ) - Number( this.moveBackward );
+ this.direction.x = Number( this.moveRight ) - Number( this.moveLeft );
+ this.direction.normalize(); // this ensures consistent movements in all directions
+ if ( this.moveForward || this.moveBackward ) this.velocity.z -= this.direction.z * 2000.0 * delta;
+ if ( this.moveLeft || this.moveRight ) this.velocity.x -= this.direction.x * 2000.0 * delta;
+ if ( onObject === true ) {
+ this.velocity.y = Math.max( 0, this.velocity.y );
+ this.canJump = true;
+ }
+ this.controls.moveRight( - this.velocity.x * delta );
+ this.controls.moveForward( - this.velocity.z * delta );
+ this.controls.getObject().position.y += ( this.velocity.y * delta ); // new behavior
+ if ( this.controls.getObject().position.y < 10 ) {
+ this.velocity.y = 0;
+ this.controls.getObject().position.y = 10;
+ this.canJump = true;
+ }
+ }
+ this.prevTime = time;
+ }
+ 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.controls.lock();
}
this.removeObject = function (nameorid) {
for (let i = 0; i < this.objects.length; i++) {
@@ -154,94 +320,57 @@
// plane.position.y = - 200;
// plane.receiveShadow = true;
// this.addObject(plane);
- //
+
// const helper = new THREE.PolarGridHelper( 2000, 100 );
- const helper = new THREE.GridHelper( 5000, 300 );
+
+ const helper = new THREE.GridHelper( 8000, 300 );
helper.position.y = - 0;
helper.material.opacity = 0.25;
helper.material.transparent = true;
this.addObject( helper );
- }
- this.initModel = function () {
- let that = this;
- // let object;
- // const onProgress = function ( xhr ) {
- // if ( xhr.lengthComputable ) {
- // const percentComplete = xhr.loaded / xhr.total * 100;
- // console.log( Math.round( percentComplete, 2 ) + '% downloaded' );
- // }
- // };
- // const onError = function () { };
- // function loadModel() {
- // object.traverse( function ( child ) {
- // if ( child.isMesh ) child.material.map = texture;
- // } );
- // object.position.y = 195;
- // that.addObject( object );
- // }
- // const manager = new THREE.LoadingManager(loadModel);
- // const textureLoader = new THREE.TextureLoader( manager );
- // const texture = textureLoader.load( '../static/model/obj/uv_grid_opengl.jpg' );
- // const loader = new OBJLoader( manager );
- // loader.load( '../static/model/obj/AGV.obj', function ( obj ) {
- // object = obj;
- // }, onProgress, onError );
- const manager = new THREE.LoadingManager();
- // manager.addHandler( /\.dds$/i, new DDSLoader() );
- new MTLLoader(manager)
- .setPath( '../static/model/obj/' )
- .load( '璐у弶.mtl', function ( materials ) {
- materials.preload();
- new OBJLoader( manager )
- .setMaterials( materials )
- .setPath( '../static/model/obj/' )
- .load( 'AGV.obj', function ( object ) {
- object.position.y = 0;
- that.addObject( object );
- }, null, null );
- });
+
+ // this.addObject(new Floor({position: {}}))
}
this.initStoreObjects = function (object) {
if (this.firstTime === 1) {
+ initStore();
if (Store3DData !== null) {
- //鏄剧ず浠撳簱鍖哄煙
- for (let i = 0; i < Store3DData.Areas.length; i++) {
- let optionArea = Store3DData.Areas[i];
- let area = new StoreArea(optionArea);
- object.addObject(area);
- //鏄剧ず浠撳簱
- for (let j = 0; j < optionArea.Stores.length; j++) {
- let optionStore = optionArea.Stores[j];
- optionStore.Position = CommonFunction.transPosition(optionStore.Position, optionArea.Position);
- let store = new Store(optionStore);
- object.addObject(store);
- //鏄剧ず姣忚淇℃伅
- for (let k = 0; k < optionStore.Groups.length; k++) {
- let optionGroup = optionStore.Groups[k];
- optionGroup.Position = CommonFunction.transPosition(optionGroup.Position, optionStore.Position);
- let shelf = new StoreShelf(optionGroup);
- let group=new StoreGroup(optionGroup,1);
- object.addObject(shelf);
- // object.addObject(group);
- //鏄剧ず搴撲綅涓婄殑璐х墿
- for (let m = 0; m < optionGroup.Bins.length; m++) {
- let optionBin = optionGroup.Bins[m];
- let existGoods=this.getExistedGoodType(optionBin.State);
- let storeGoods = new StoreGoods(optionGroup, optionBin);
- if(existGoods==null) {
- let goods=storeGoods.create();
- object.addObject(goods);
- this.goodTypes.push({type: optionBin.State, object: goods});
- } else {
- let goods= storeGoods.clone(existGoods);
- object.addObject(goods);
- }
- }
- }
+ for(var group of Store3DData.data.store.groups) {
+ new StoreCrn(group.crn, object);
+ for (var line of group.lines) {
+ let shelf = new StoreShelf(line);
+ object.addObject(shelf);
+ //鏄剧ず搴撲綅涓婄殑璐х墿
+ // for (var bin of line.bins) {
+ // let existGoods=this.getExistedGoodType(bin.State);
+ // let storeGoods = new StoreGoods(optionGroup, bin);
+ // if(existGoods==null) {
+ // let goods=storeGoods.create();
+ // object.addObject(goods);
+ // this.goodTypes.push({type: bin.State, object: goods});
+ // } else {
+ // let goods= storeGoods.clone(existGoods);
+ // object.addObject(goods);
+ // }
+ // }
}
}
- this.firstTime = 0;
+ }
+ }
+ }
+ this.queryCrn = function () {
+ if (CrnDatas !== null) {
+ for (let crnData of CrnDatas) {
+ let crnTask = getArrVal(this.crnTasks, "crnNo", crnData.crnNo);
+ if (null == crnTask) {
+ this.crnTasks.push(new CrnTask(crnData, this));
+ } else {
+ if(!crnTask.run) {
+ // console.log(2)
+ crnTask.modify(crnData);
+ }
+ }
}
}
}
@@ -253,10 +382,79 @@
}
}
return null;
+ }
+ this.initModel = function () {
+ let that = this;
+ const manager = new THREE.LoadingManager();
+ // manager.addHandler( /\.dds$/i, new DDSLoader() );
+ // new MTLLoader(manager)
+ // .setPath( '../static/model/obj/' )
+ // .load( '璐у弶.mtl', function ( materials ) {
+ // materials.preload();
+ // new OBJLoader( manager )
+ // .setMaterials( materials )
+ // .setPath( '../static/model/obj/' )
+ // .load( '璐у弶.obj', function ( object ) {
+ // object.position.z = -480;
+ // object.position.x = -1735;
+ // object.scale.set(0.03, 0.03, 0.03);
+ // object.rotateY(- Math.PI / 2)
+ // that.addObject( object );
+ // }, null, null );
+ // });
+ // new MTLLoader(manager)
+ // .setPath( '../static/model/obj/' )
+ // .load( '杞借揣鍙�.mtl', function ( materials ) {
+ // materials.preload();
+ // new OBJLoader( manager )
+ // .setMaterials( materials )
+ // .setPath( '../static/model/obj/' )
+ // .load( '杞借揣鍙�.obj', function ( object ) {
+ // object.position.z = -480;
+ // object.position.x = -1735;
+ // object.scale.set(0.03, 0.03, 0.03);
+ // object.rotateY(- Math.PI / 2)
+ // that.addObject( object );
+ // }, null, null );
+ // });
+ // new MTLLoader(manager)
+ // .setPath( '../static/model/obj/' )
+ // .load( '鍫嗗灈鏈烘湰浣�.mtl', function ( materials ) {
+ // materials.preload();
+ // new OBJLoader( manager )
+ // .setMaterials( materials )
+ // .setPath( '../static/model/obj/' )
+ // .load( '鍫嗗灈鏈烘湰浣�.obj', function ( object ) {
+ // object.position.z = -480;
+ // object.position.x = -1735;
+ // // object.position.z = 0;
+ // // object.position.x = 0;
+ // // object.position.y = 0;
+ // object.scale.set(0.03, 0.03, 0.03);
+ // object.rotateY(- Math.PI / 2)
+ // that.addObject( object );
+ // }, null, null );
+ // });
+ }
+ this.crnMove = function (object) {
+ for (let crnTask of this.crnTasks) {
+ crnTask.move();
+ }
+ }
+ // 鍔熻兘鏂规硶鍖�
+ this.changeStats = function () {
+ if (this.stats.domElement.style.display === 'none') {
+ this.stats.domElement.style.display = 'block';
+ } else {
+ this.stats.domElement.style.display = 'none';
+ }
+ }
+ this.changeBackGround = function () {
+ this.backgroundType = !this.backgroundType;
+ this.initBackground();
}
},
-
};
--
Gitblit v1.9.1