From 4c43d7b83b97815d8c48526b4edbd993d28e07bf Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期二, 28 二月 2023 13:40:33 +0800
Subject: [PATCH] #
---
static/js/app.js | 230 +++++++++++++++++++++++++++-----------------------------
1 files changed, 111 insertions(+), 119 deletions(-)
diff --git a/static/js/app.js b/static/js/app.js
index bf23ed8..cf1bd8b 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -1,13 +1,18 @@
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 {StoreConvey} from './object/StoreConvey.js';
-import { Sky } from './object/Sky.js';
-
+import {StoreGoods} from './object/StoreGoods.js';
+import {StaTask} from './object/StaTask.js';
var APP = {
@@ -19,8 +24,9 @@
this.objects = [];//鍦烘櫙涓墍鏈夊璞$殑闆嗗悎
this.firstTime = 1;
this.stats = null;
- this.goodTypes=[];//瀛樺偍鎵�鏈夌殑搴撲綅绫诲瀷
+ this.outlinePass = null;
this.crnTasks = [];// 鍫嗗灈鏈哄垪琛�
+ this.staTasks = [];// 杈撻�佺嚎鍒楄〃
this.moveForward = false;//鏄惁鍚戝墠杩愯
this.moveBackward = false;//鏄惁鍚戝悗杩愯
this.moveLeft = false;//鏄惁鍚戝乏杩愯
@@ -30,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();
@@ -45,100 +51,73 @@
this.initStats();
this.initLight();
this.initReSize(this);
+ this.initOutLine();
+ // this.initComposer();
+ this.initObjectSelect();
this.initPointLockControl(this);
this.initFloor();
this.initBuilding();
- this.initConvey(this);
+ 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();
this.queryCrn();
this.crnMove();
+ this.querySta();
}
this.initScene = function () {
this.scene = new THREE.Scene();
}
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);
@@ -158,39 +137,17 @@
}
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/' );
+ 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 () {
@@ -199,9 +156,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);
+ }
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 ) {
@@ -319,8 +300,10 @@
// 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 );
@@ -339,31 +322,21 @@
}
}
}
- this.initConvey = function (object) {
- var convey = new StoreConvey(this);
+ this.initConvey = function () {
+ let storeConvey = new StoreConvey(this, conveyObjects.objects)
+ storeConvey.load();
}
this.initStoreObjects = function (object) {
if (this.firstTime === 1) {
if (Store3DData !== undefined && Store3DData !== null) {
- for(var group of Store3DData.data.store.groups) {
+ for(let group of Store3DData.data.store.groups) {
new StoreCrn(group.crn, object);
- for (var line of group.lines) {
+ for (let 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);
- // }
- // }
-
+ object.addObject(shelf.mesh);
+ if (line.bins !== null) {
+ new StoreGoods(object, line.bins, shelf);
+ }
}
}
this.firstTime = 0;
@@ -378,25 +351,29 @@
this.crnTasks.push(new CrnTask(crnData, this));
} else {
if(!crnTask.run) {
- // console.log(2)
crnTask.modify(crnData);
}
}
}
}
}
- this.getExistedGoodType=function(state){
- for (let i=0;i<this.goodTypes.length;i++) {
- let type=this.goodTypes[i];
- if(type.type===state) {
- return type.object;
- }
- }
- return null;
- }
- this.crnMove = function (object) {
+ this.crnMove = function () {
for (let crnTask of this.crnTasks) {
crnTask.move();
+ }
+ }
+ this.querySta = function () {
+ if (StaDatas !== null && this.firstTime === 0) {
+ for (let staData of StaDatas) {
+ let staTask = getArrVal(this.staTasks, "no", staData.no);
+ if (null == staTask) {
+ this.staTasks.push(new StaTask(staData, this));
+ } else {
+ if(!staTask.run && !staTask.isDel) {
+ staTask.modify(staData);
+ }
+ }
+ }
}
}
@@ -420,6 +397,21 @@
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