import * as THREE from "../../libs/three.js/build/three.module.js"; import math from './math' let texLoader = new THREE.TextureLoader() let circleGeo = new THREE.CircleGeometry(1.45,100); const magDistance_ = 2;//相机离目标位置的距离的分界线,当离得远时要缩小fov以使看到的视野固定(望远镜效果) const radius_ = 0.2; //当相机离目标位置的距离>magDistance_时,希望看到的视野的半径 const maxFov = THREE.Math.radToDeg(Math.atan(radius_ / magDistance_ )) * 2//提前计算出当相机离目标位置的距离{ // 平移、滚轮时更新 if(e.viewport == viewer.mainViewport) this.update() }) this.unvisibleReasons = []; //如果length>0代表不可见 this.mesh.layers.set(Potree.config.renderLayers.magnifier); this.overlayMesh.layers.set(Potree.config.renderLayers.magnifier); //this.layers.set(Potree.config.renderLayers.magnifier);//这句在外层写没用 this.dontRender = false viewer.addEventListener('global_drag', (e)=>{//拖拽时不渲染。主要是右键平移时渲染延迟了,会闪烁。 this.dontRender = true }) viewer.addEventListener('global_drop', (e)=>{ this.dontRender = false }) viewer.addEventListener('global_mousemove', (e)=>{ if(e.hoverViewport == viewer.mainViewport){ this.updateVisible("atViewport", true) this.update(e.intersectPoint && e.intersectPoint.location) }else{ this.updateVisible("atViewport", false) } }) /* viewer.addEventListener("beginSplitView",()=>{ this.updateVisible("splitView", false) }) viewer.addEventListener("finishSplitView",()=>{ this.updateVisible("splitView", true) }) */ viewer.addEventListener("measureMovePoint",()=>{ this.updateVisible("measure", true) }) viewer.addEventListener("endMeasureMove",()=>{ this.updateVisible("measure", false) }) this.updateVisible("measure", false) } updateVisible(reason, ifShow){ if(ifShow){ var index = this.unvisibleReasons.indexOf(reason) index > -1 && this.unvisibleReasons.splice(index, 1) if(this.unvisibleReasons.length == 0)this.visible = true }else{ if(!this.unvisibleReasons.includes(reason)) this.unvisibleReasons.push(reason) this.visible = false } } update(aimPos){ aimPos = aimPos instanceof THREE.Vector3 ? aimPos : this.aimPos if(!aimPos || !this.visible)return //console.log(aimPos) //相机位置 var playerCamera = viewer.scene.getActiveCamera() var playerPos = playerCamera.position;//viewer.scene.view.getPivot() var dis = playerPos.distanceTo(aimPos); /* var vec = playerPos.clone().sub(aimPos).normalize().multiplyScalar(dis > magDistance_ ? magDistance_ : magDistance_/2) this.camera.position.copy(aimPos.clone().add(vec)) this.camera.lookAt(aimPos) */ if(dis