我用的的示例類發方式來初始化場景。
類里面定義點擊方法。
initMouse(fun) {window.addEventListener("click", (event) => {this.clickObject(event, fun);});}// 鼠標事件clickObject(event, fun) {// 計算點擊位置的歸一化設備坐標const mouse = new THREE.Vector2();mouse.x = (event.clientX / window.innerWidth) * 2 - 1;mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;// 創建射線投射器const raycaster = new THREE.Raycaster();raycaster.setFromCamera(mouse, this.camera);// 獲取與射線相交的物體數組const intersects = raycaster.intersectObjects(this.scene.children, true);if (intersects.length > 0) {// intersects[0].object 是與射線相交的第一個物體const clickedObject = intersects[0].object;// 這里可以進一步處理點擊的物體fun(intersects[0].object);// clickedObject.material.color.set(0xff0000); // 設置點擊物體的顏色為紅色}}
使用時調用initMouse傳入回調函數。
ffThree.initMouse(callBack);function callBack(obje) {console.log("obje為選中的物體 下面寫對選中物體做的事情");obje.material.color.set(0xff0000);
}