feat(board): 更新机场模型并添加交互功能

- 导入 OrbitControls、CSS2DRenderer 和 CSS2DObject 模块
- 添加环境光和轨道控制器
- 调整相机位置和旋转角度
- 优化渲染循环和场景设置
boardTest
zch 8 months ago
parent dbe5b7728b
commit 246833ad98

@ -6,6 +6,10 @@
import * as THREE from 'three'; import * as THREE from 'three';
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'; import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader'; import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader';
import {OrbitControls} from "three/examples/jsm/controls/OrbitControls";
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer'// CSS2DRendererThree.jsCSS
import { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer'// CSS2DObjectCSSThree.js
export default { export default {
name: 'AirportModel', name: 'AirportModel',
@ -25,7 +29,7 @@ export default {
// Three.js // Three.js
const scene = new THREE.Scene(); const scene = new THREE.Scene();
// //
const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000); const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 100000000);
// WebGL 齿 // WebGL 齿
const renderer = new THREE.WebGLRenderer({ antialias: true }); const renderer = new THREE.WebGLRenderer({ antialias: true });
// //
@ -33,38 +37,54 @@ export default {
// DOM // DOM
container.appendChild(renderer.domElement); container.appendChild(renderer.domElement);
// // 0xffffff1
const light = new THREE.DirectionalLight(0xffffff, 1); const light = new THREE.DirectionalLight(0xffffff, 1);
// 0xffffff1
const ambient = new THREE.AmbientLight(0xffffff, 1);
// //
light.position.set(5, 3, 5); light.position.set(5, 3, 5);
// //
scene.add(light); scene.add(light);
scene.add(ambient);
// OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// OrbitControls
controls.target = new THREE.Vector3(-433, 300, -217);
// OrbitControls使
controls.update();
// MTL // MTL
const mtlLoader = new MTLLoader(); const mtlLoader = new MTLLoader();
mtlLoader.load('/model/jiaodongjichang.mtl', (materials) => { // MTL
mtlLoader.load('/model/daxingjichang.mtl', (materials) => {
//
materials.preload(); materials.preload();
// OBJLoader
const objLoader = new OBJLoader(); const objLoader = new OBJLoader();
// OBJLoader
objLoader.setMaterials(materials); objLoader.setMaterials(materials);
objLoader.load('/model/jiaodongjichang.obj', (object) => { // OBJ
objLoader.load('/model/daxingjichang.obj', (object) => {
// Y
object.position.y = -1; object.position.y = -1;
//
scene.add(object); scene.add(object);
}); });
} ); } );
camera.position.set(-379.67901969707856, 1591.6047450835238, -1302.6577410405184);//
camera.rotation.set(-1302.6577410405184,-1302.6577410405184,3.104032443868015);//
//
camera.position.z = 5;
// //
const animate = () => { const animate = () => {
// //
requestAnimationFrame(animate); requestAnimationFrame(animate);
// //
console.log(camera);
renderer.render(scene, camera); renderer.render(scene, camera);
}; };
// //
animate(); animate();
} }
} }
}; };

Loading…
Cancel
Save