@@ -17,12 +17,19 @@ import Human from "@/components/Human.js";
1717import {
1818 CAR_MODEL_PATH ,
1919 TRAFFIC_LIGHT_MODEL_PATH ,
20+ ENV_MAP_PATH ,
21+ ENV_MAP_NAME ,
2022} from " ../utils/constants.js" ;
23+ import { RGBELoader } from " three/examples/jsm/loaders/RGBELoader.js" ;
24+ import LogReader from " @/components/LogReader.js" ;
25+ import logJson1 from " @/logs/final_log_1.json" ;
26+ import logJson2 from " @/logs/final_log_2.json" ;
27+ import logJson3 from " @/logs/final_log_3.json" ;
2128
2229const container = ref (null );
2330const camera = ref (null );
24- const cameraMode = ref (" free " );
25- let scene, renderer, controls;
31+ const cameraMode = ref (" follow " );
32+ let scene, renderer, controls, logReader ;
2633
2734let car, roadGeometry, roadMaterial;
2835let lastTime = performance .now ();
@@ -32,26 +39,32 @@ let trafficLights = [];
3239let carIdx = 0 ;
3340
3441const keys = { forward: false , backward: false , left: false , right: false };
42+ const createFuncs = {
43+ ' vehicle' : createCar,
44+ ' pedestrian' : createHuman,
45+ ' traffic_light' : createTrafficLight,
46+ }
3547
3648onMounted (() => {
3749 window .addEventListener (" keydown" , handleKeyDown);
3850 window .addEventListener (" keyup" , handleKeyUp);
3951 window .addEventListener (" keypress" , handleKeyPress);
4052
4153 initScene ();
42- car = createCar (0 , 0 , 0 , Math .PI / 2 );
43- for (let i = 0 ; i < 4 ; i++ ) {
44- const offset = (i + 1 ) * 10 ;
45- createCar (
46- offset,
47- 0 ,
48- (i % 2 === 0 ? - 1 : 1 ) * (Math .random () * 5 ),
49- Math .PI / 2
50- );
51- }
52- createTrafficLight (0 , 0 , 5 );
53- createHuman (- 3 , 0 , 4 );
54- createHuman (2 , 0 , 6 );
54+ logReader = new LogReader (logJson2, scene, createFuncs);
55+ // car = createCar(0, 0, 0, Math.PI / 2);
56+ // for (let i = 0; i < 4; i++) {
57+ // const offset = (i + 1) * 10;
58+ // createCar(
59+ // offset,
60+ // 0,
61+ // (i % 2 === 0 ? -1 : 1) * (Math.random() * 5),
62+ // Math.PI / 2
63+ // );
64+ // }
65+ // createTrafficLight(0, 0, 5);
66+ // createHuman(-3, 0, 4);
67+ // createHuman(2, 0, 6);
5568 animate ();
5669});
5770
@@ -61,19 +74,20 @@ function createCar(x, y, z, heading) {
6174 return newCar;
6275}
6376
64- function createTrafficLight (x , y , z ) {
77+ function createTrafficLight (x , y , z , rotation ) {
6578 const newTrafficLight = new TrafficLight (
6679 TRAFFIC_LIGHT_MODEL_PATH ,
6780 { x: x, y: y, z: z },
81+ rotation,
6882 loadCallBack
6983 );
7084 trafficLights .push (newTrafficLight);
7185 return newTrafficLight;
7286}
7387
74- function createHuman (x , y , z ) {
88+ function createHuman (x , y , z , rotation ) {
7589 const color = Math .random () * 0xffffff ;
76- const newHuman = new Human (color, { x: x, y: y, z: z });
90+ const newHuman = new Human (color, { x: x, y: y, z: z }, rotation );
7791 scene .add (newHuman .group );
7892 humans .push (newHuman);
7993 return newHuman;
@@ -167,9 +181,16 @@ function initScene() {
167181 controls = new OrbitControls (camera .value , renderer .domElement );
168182 controls .enableDamping = true ;
169183
170- const light = new THREE.DirectionalLight (0xffffff , 1 );
171- light .position .set (5 , 10 , 5 );
172- scene .add (light);
184+ new RGBELoader ()
185+ .setPath (ENV_MAP_PATH )
186+ .load (ENV_MAP_NAME , (texture ) => {
187+ texture .mapping = THREE .EquirectangularReflectionMapping ;
188+ scene .environment = texture;
189+ });
190+
191+ // const light = new THREE.DirectionalLight(0xffffff, 1);
192+ // light.position.set(5, 10, 5);
193+ // scene.add(light);
173194 scene .add (new THREE.HemisphereLight (0xffffbb , 0x080820 , 1 ));
174195
175196 loadRoad ();
@@ -208,7 +229,7 @@ function loadRoad() {
208229
209230 scene .add (roadMesh);
210231
211- createRoadLines ();
232+ // createRoadLines();
212233}
213234
214235function createRoadLines () {
@@ -245,8 +266,9 @@ function createRoadLines() {
245266}
246267
247268function updateCamera () {
248- if (! car || ! car .group ) return ;
269+ if (! logReader || ! logReader . car || ! logReader . car .group ) return ;
249270 if (cameraMode .value === " free" ) return ;
271+ const car = logReader .car ;
250272
251273 const carPosition = car .group .position ;
252274 const carDirection = new THREE.Vector3 ();
@@ -271,9 +293,12 @@ function animate() {
271293 const dt = (currentTime - lastTime) / 1000 ;
272294 lastTime = currentTime;
273295
274- if (car ) {
275- car .update (keys, dt);
296+ if (logReader ) {
297+ logReader .update (dt);
276298 }
299+ // if (car) {
300+ // car.update(keys, dt);
301+ // }
277302 // for (const h of humans) {
278303 // h.walk();
279304 // }
@@ -287,6 +312,12 @@ function onWindowResize() {
287312 camera .value .updateProjectionMatrix ();
288313 renderer .setSize (window .innerWidth , window .innerHeight );
289314}
315+ onBeforeUnmount (() => {
316+ window .removeEventListener (" keydown" , handleKeyDown);
317+ window .removeEventListener (" keyup" , handleKeyUp);
318+ window .removeEventListener (" keypress" , handleKeyPress);
319+ window .removeEventListener (" resize" , onWindowResize);
320+ });
290321 </script >
291322
292323<style >
0 commit comments