123
						commit
						dc63189d44
					
				
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.2 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.8 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 31 MiB  | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 69 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 194 KiB  | 
| 
						 | 
				
			
			@ -247,28 +247,31 @@ const enableGroup = [
 | 
			
		|||
    'tanghua_room',
 | 
			
		||||
    'touliao_room',
 | 
			
		||||
]
 | 
			
		||||
// const onMouseDown = (event) => {
 | 
			
		||||
//     // 计算鼠标点击位置的归一化设备坐标
 | 
			
		||||
//     mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
//     mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
const onMouseMove = (event) => {
 | 
			
		||||
    var raycaster = new THREE.Raycaster()
 | 
			
		||||
    // 计算鼠标点击位置的归一化设备坐标
 | 
			
		||||
    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
    mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
 | 
			
		||||
//     var raycaster = new THREE.Raycaster()
 | 
			
		||||
//     cleanColor();
 | 
			
		||||
//     // 更新射线的起点和方向
 | 
			
		||||
//     raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
//     // 计算射线和场景中所有可点击物体的相交情况
 | 
			
		||||
//     const intersects = raycaster.intersectObjects(scene.children, true);
 | 
			
		||||
//     // 如果找到了模型,将其材质修改为绿色
 | 
			
		||||
//     if (intersects.length > 0) {
 | 
			
		||||
//         const clickedObject = intersects[0].object;
 | 
			
		||||
//         // 储存被选中的模型和材质
 | 
			
		||||
//         selectedObject = clickedObject;
 | 
			
		||||
//         // // 修改材质为绿色
 | 
			
		||||
//         selectedObject.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
 | 
			
		||||
//         nearCamera(intersects);
 | 
			
		||||
//     }
 | 
			
		||||
 | 
			
		||||
// }
 | 
			
		||||
    // 更新射线的起点和方向
 | 
			
		||||
    raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
    // 计算射线和场景中所有可点击物体的相交情况
 | 
			
		||||
    const intersects = raycaster.intersectObjects(scene.children, true);
 | 
			
		||||
    // 如果找到了模型,将其材质修改为绿色
 | 
			
		||||
    if (intersects.length > 0) {
 | 
			
		||||
        const clickedObject = intersects[0].object;
 | 
			
		||||
        // 储存被选中的模型和材质
 | 
			
		||||
        selectedObject = clickedObject;
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.name) != -1) {
 | 
			
		||||
            outlineObj([selectedObject])
 | 
			
		||||
            // nearCamera(intersects);
 | 
			
		||||
        }
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.parent.name) != -1) {
 | 
			
		||||
            outlineObj([selectedObject.parent])
 | 
			
		||||
            // nearCamera(intersects);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
const onMouseDown = (event) => {
 | 
			
		||||
    var raycaster = new THREE.Raycaster()
 | 
			
		||||
    // 计算鼠标点击位置的归一化设备坐标
 | 
			
		||||
| 
						 | 
				
			
			@ -283,13 +286,18 @@ const onMouseDown = (event) => {
 | 
			
		|||
    if (intersects.length > 0) {
 | 
			
		||||
        const clickedObject = intersects[0].object;
 | 
			
		||||
        // 储存被选中的模型和材质
 | 
			
		||||
        selectedObject = clickedObject.parent;
 | 
			
		||||
        selectedObject = clickedObject;
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.name) != -1) {
 | 
			
		||||
            outlineObj([selectedObject])
 | 
			
		||||
            alert("点击了",selectedObject.name)
 | 
			
		||||
            // nearCamera(intersects);
 | 
			
		||||
        }
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.parent.name) != -1) {
 | 
			
		||||
            outlineObj([selectedObject.parent])
 | 
			
		||||
            alert("点击了",selectedObject.parent.name)
 | 
			
		||||
            // nearCamera(intersects);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let composer = null
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div>
 | 
			
		||||
        <div id="gltf"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup>
 | 
			
		||||
import { onMounted, ref } from 'vue';
 | 
			
		||||
import * as THREE from 'three';
 | 
			
		||||
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
 | 
			
		||||
import { RoomEnvironment } from "three/examples/jsm/environments/RoomEnvironment.js";
 | 
			
		||||
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
 | 
			
		||||
 | 
			
		||||
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
 | 
			
		||||
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass.js";
 | 
			
		||||
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass.js";
 | 
			
		||||
import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass.js";
 | 
			
		||||
import { FXAAShader } from "three/examples/jsm/shaders/FXAAShader.js";
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
    init();
 | 
			
		||||
    loadSence();
 | 
			
		||||
    renderScene();
 | 
			
		||||
    document.addEventListener("click", onMouseDown);
 | 
			
		||||
    // document.addEventListener("mousemove", onMouseMove);
 | 
			
		||||
});
 | 
			
		||||
let scene, renderer, camera;
 | 
			
		||||
const init = () => {
 | 
			
		||||
    // 场景
 | 
			
		||||
    scene = new THREE.Scene();
 | 
			
		||||
    // 相机
 | 
			
		||||
    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
 | 
			
		||||
    // camera.position.z = 5;
 | 
			
		||||
    camera.position.set(-46.650, 67.456, 38.088);
 | 
			
		||||
    //渲染器
 | 
			
		||||
    renderer = new THREE.WebGLRenderer({ antialias: true });
 | 
			
		||||
    renderer.setPixelRatio(window.devicePixelRatio);
 | 
			
		||||
    renderer.setSize(window.innerWidth, window.innerHeight);
 | 
			
		||||
    renderer.outputEncoding = THREE.sRGBEncoding;
 | 
			
		||||
    document.getElementById('gltf').appendChild(renderer.domElement);
 | 
			
		||||
 | 
			
		||||
    const controls = new OrbitControls(camera, renderer.domElement);
 | 
			
		||||
    const pmremGenerator = new THREE.PMREMGenerator(renderer);
 | 
			
		||||
    scene.environment = pmremGenerator.fromScene(new RoomEnvironment()).texture;
 | 
			
		||||
}
 | 
			
		||||
const loadSence = () => {
 | 
			
		||||
    const gltfLoader = new GLTFLoader();
 | 
			
		||||
    gltfLoader.load('/jzc/scene.gltf', (gltf) => {
 | 
			
		||||
        var model = gltf.scene;
 | 
			
		||||
        scene.add(model);
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
const renderScene = () => {
 | 
			
		||||
    requestAnimationFrame(renderScene);
 | 
			
		||||
    renderer.render(scene, camera);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 能选中的组
 | 
			
		||||
const enableGroup = [
 | 
			
		||||
    'set1',
 | 
			
		||||
    'set2',
 | 
			
		||||
    'set3',
 | 
			
		||||
    'set4',
 | 
			
		||||
    'set5',
 | 
			
		||||
    'set6',
 | 
			
		||||
    'set7',
 | 
			
		||||
    'set8',
 | 
			
		||||
    'yuanliao_room',
 | 
			
		||||
    'tanghua_room',
 | 
			
		||||
    'touliao_room',
 | 
			
		||||
]
 | 
			
		||||
let mouse = new THREE.Vector2();
 | 
			
		||||
let selectedObjects = ref([]);
 | 
			
		||||
let selectBoxByClick, selectBoxByMouseon;
 | 
			
		||||
// 鼠标移动效果
 | 
			
		||||
const onMouseMove = (event) => {
 | 
			
		||||
    var raycaster = new THREE.Raycaster()
 | 
			
		||||
    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
    mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
    raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
    const intersects = raycaster.intersectObjects(scene.children, true);
 | 
			
		||||
    if (intersects.length > 0) {
 | 
			
		||||
        const clickedObject = intersects[0].object;
 | 
			
		||||
        var selectedObject = clickedObject;
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.name) != -1) {
 | 
			
		||||
            selectedObjects[0] = selectedObject
 | 
			
		||||
        }
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.parent.name) != -1) {
 | 
			
		||||
            selectedObjects[0] = selectedObject.parent
 | 
			
		||||
        }
 | 
			
		||||
        if (selectBoxByMouseon) {
 | 
			
		||||
            scene.remove(selectBoxByMouseon);
 | 
			
		||||
        }
 | 
			
		||||
        selectBoxByMouseon = new THREE.BoxHelper(selectedObjects[0], '#ffffff');
 | 
			
		||||
        scene.add(selectBoxByMouseon);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
// 鼠标点击效果
 | 
			
		||||
const onMouseDown = (event) => {
 | 
			
		||||
    var raycaster = new THREE.Raycaster()
 | 
			
		||||
    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
 | 
			
		||||
    mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
 | 
			
		||||
    raycaster.setFromCamera(mouse, camera);
 | 
			
		||||
    const intersects = raycaster.intersectObjects(scene.children, true);
 | 
			
		||||
    if (intersects.length > 0) {
 | 
			
		||||
        const clickedObject = intersects[0].object;
 | 
			
		||||
        var selectedObject = clickedObject;
 | 
			
		||||
        console.log(selectedObject);
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.name) != -1) {
 | 
			
		||||
            selectedObjects[0] = selectedObject
 | 
			
		||||
        }
 | 
			
		||||
        if (enableGroup.indexOf(selectedObject.parent.name) != -1) {
 | 
			
		||||
            selectedObjects[0] = selectedObject.parent
 | 
			
		||||
        }
 | 
			
		||||
        if (selectBoxByClick) {
 | 
			
		||||
            scene.remove(selectBoxByClick);
 | 
			
		||||
        }
 | 
			
		||||
        selectBoxByClick = new THREE.BoxHelper(selectedObjects[0], '#00ffff');
 | 
			
		||||
        scene.add(selectBoxByClick);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ import DeviceEvent from './components/DeviceEvent.vue';
 | 
			
		|||
import ApplicationTree from './components/ApplicationTree.vue';
 | 
			
		||||
import EquipmentInfo from './components/EquipmentInfo.vue';
 | 
			
		||||
import RealData from './components/RealData.vue';
 | 
			
		||||
import ThreeView from './components/ThreeView.vue';
 | 
			
		||||
import ThreeView from './components/ThreeView2.vue';
 | 
			
		||||
// import ThreeModel from './components/ThreeModel.vue';
 | 
			
		||||
import DeviceInfoDialog from './components/DeviceInfoDialog.vue';
 | 
			
		||||
import RealInfoDialog from './components/RealInfoDialog.vue';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ export default defineConfig(({ mode, command }) => {
 | 
			
		|||
    },
 | 
			
		||||
    // vite 相关配置
 | 
			
		||||
    server: {
 | 
			
		||||
      port: 80,
 | 
			
		||||
      port: 8080,
 | 
			
		||||
      host: true,
 | 
			
		||||
      open: true,
 | 
			
		||||
      proxy: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue