xzw 1 năm trước cách đây
mục cha
commit
b2c7b8dcb7
2 tập tin đã thay đổi với 22 bổ sung22 xóa
  1. 18 18
      src/custom/viewer/ViewerNew.js
  2. 4 4
      src/navigation/InputHandlerNew.js

+ 18 - 18
src/custom/viewer/ViewerNew.js

@@ -911,13 +911,13 @@ export class Viewer extends ViewerBase{
     
      
     
-    ifPointBlockedByIntersect(pos3d , panoId,  soon ){//点是否被遮挡
+    ifPointBlockedByIntersect(point , panoId,  soon ){//点是否被遮挡
         let ifShelter
         let now = Date.now()
         let extraPanoId = panoId != void 0 
         if(!this.shelterCount)return
         
-        let history = shelterHistory.find(e=>e.pos3d.equals(pos3d)) 
+        let history = shelterHistory.find(e=>e.point.equals(point)) 
         let cameraPos = this.mainViewport.view.position.clone()
         if(panoId == void 0){
             if(this.images360.isAtPano(0.05)){
@@ -940,7 +940,7 @@ export class Viewer extends ViewerBase{
             shelterHistory.splice(index, 1)
             
         }else{//新增
-            history = {pos3d,  panos:{}, notAtPano:{}} 
+            history = {point,  panos:{}, notAtPano:{}} 
              
             const minCount = 100
             if(shelterHistory.length > minCount){//去除最早的
@@ -964,21 +964,21 @@ export class Viewer extends ViewerBase{
             if(panoId != void 0){
                 let pano = this.images360.getPano(panoId)
                 if((soon || this.shelterCount.byTex<this.shelterCount.maxByTex) && pano.depthTex){
-                    ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d, margin:Potree.config.shelterMargin, useDepthTex:true, pano, viewport:this.mainViewport  }  ) 
+                    ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point, margin:Potree.config.shelterMargin, useDepthTex:true, pano, viewport:this.mainViewport  }  ) 
                     history.panos[panoId] = ifShelter
                     this.shelterCount.byTex ++ ;
-                    //console.log('computeByTex direct', panoId, pos3d, ifShelter)
+                    //console.log('computeByTex direct', panoId, point, ifShelter)
                 }else{
-                    //console.log('延迟tex',panoId, pos3d )
+                    //console.log('延迟tex',panoId, point )
                     history.waitCompute = {panoId,   forceGet:extraPanoId  }
                     return useLastResult() 
                 }
             }else{ 
                 if(/* history.ifShelter == void 0 || */ this.shelterCount.byCloud<this.shelterCount.maxByCloud){//弊端:第一个总是直接计算,后面的都是延后。但无法改进,因是一个个传进来的,无法预测。 
-                    ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d, margin:Potree.config.shelterMargin, pickWindowSize:3}  ) 
+                    ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point, margin:Potree.config.shelterMargin, pickWindowSize:3}  ) 
                     history.notAtPano = {cameraPos , ifShelter }
                     this.shelterCount.byCloud ++ ; 
-                    //console.log('computeByCloud direct', pos3d.toArray())
+                    //console.log('computeByCloud direct', point.toArray())
                 }else{
                     //console.log('延迟cloud' )
                     history.waitCompute = {cameraPos}
@@ -1034,11 +1034,11 @@ export class Viewer extends ViewerBase{
                              if(byTex >= maxTexCount)break
                              
                              byTex ++
-                             let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d:history.pos3d, margin:Potree.config.shelterMargin, useDepthTex:true, viewport:this.mainViewport }  ) 
+                             let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point:history.point, margin:Potree.config.shelterMargin, useDepthTex:true, viewport:this.mainViewport }  ) 
                              history.panos[this.images360.currentPano.id] = ifShelter 
                              history.ifShelter = ifShelter
                              delete history.waitCompute  
-                             //console.log('补1', history.pos3d.toArray())
+                             //console.log('补1', history.point.toArray())
                          }else{
                              if(this.images360.currentPano.pointcloud.hasDepthTex){
                                  //先等待加载完深度图
@@ -1077,14 +1077,14 @@ export class Viewer extends ViewerBase{
             
             
             
-                let list = waitCloud2.map(e=>e.pos3d) 
+                let list = waitCloud2.map(e=>e.point) 
                 let result = Common.batchHandling.getSlice('shelterByCloud', list, {maxUseCount:maxCloudCount,useEquals:true, stopWhenAllUsed:true} ) //iphonex稳定后大概在7-10。  
                 //list.length>0 && console.log('list',list, maxCloudCount)
                 
                 result.list.forEach(e=>{
-                    let history = waitCloud2.find(a=>a.pos3d.equals(e))
+                    let history = waitCloud2.find(a=>a.point.equals(e))
                      
-                    let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d:history.pos3d, margin: Potree.config.shelterMargin , pickWindowSize:3, viewport:this.mainViewport}  ) 
+                    let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point:history.point, margin: Potree.config.shelterMargin , pickWindowSize:3, viewport:this.mainViewport}  ) 
                     
                     if(history.waitCompute.cameraPos){
                         history.notAtPano = {cameraPos: history.waitCompute.cameraPos , ifShelter }
@@ -1093,7 +1093,7 @@ export class Viewer extends ViewerBase{
                     }
                     history.ifShelter = ifShelter
                     byCloud++
-                    //console.log('补2',  history.pos3d.toArray()) 
+                    //console.log('补2',  history.point.toArray()) 
                     delete history.waitCompute
                 })
             
@@ -4074,12 +4074,12 @@ export class Viewer extends ViewerBase{
                 
                 if(0 ){//如果没有被选中,会被遮挡。 2023.11.15 最好展示全局(尤其截图时),虽然被遮挡,但focus的过程是选中状态全显示的,可以看出所在范围。
                     let checkIntersect = ( )=>{ 
-                        let intersect = this.inputHandler.ifBlockedByIntersect({pos3d:position, cameraPos: target})// 不一定准确
+                        let intersect = this.inputHandler.ifBlockedByIntersect({point:position, cameraPos: target})// 不一定准确
                         if(intersect){ 
                             let blockCount = 0, unblockCount = 0, visi;
                             for(let i=0;i<object.points.length;i++){ //如果顶点超过一半不可见,就要更改位置
                                 let p = object.points[i]
-                                let blocked = this.inputHandler.ifBlockedByIntersect({pos3d:p, margin:0.3 , cameraPos:position, pickWindowSize:4});
+                                let blocked = this.inputHandler.ifBlockedByIntersect({point:p, margin:0.3 , cameraPos:position, pickWindowSize:4});
                                 if(blocked){
                                     blockCount ++;
                                     if(blockCount / object.points.length >= 0.5){
@@ -4110,7 +4110,7 @@ export class Viewer extends ViewerBase{
                                     let position1 = position.clone()
                                     let dir = new THREE.Vector3().subVectors(position, target) 
                                     position.copy(target).sub(dir) 
-                                    let intersect2 = this.inputHandler.ifBlockedByIntersect({pos3d: position,  cameraPos:target})// 不一定准确
+                                    let intersect2 = this.inputHandler.ifBlockedByIntersect({point: position,  cameraPos:target})// 不一定准确
                                     if(intersect2){
                                         if(intersect2.distance < intersect.distance ){
                                             position.copy(position1)//恢复
@@ -4222,7 +4222,7 @@ export class Viewer extends ViewerBase{
                 
                 if(o.checkIntersect){//识别被点云遮住的话 
                     let intersect  //反向查找从target到相机的第一个intersect
-                    intersect = this.inputHandler.ifBlockedByIntersect({pos3d:position, margin:0,  cameraPos:target}   /* {pos3d:target, margin: 0.2,  cameraPos:position} */)  
+                    intersect = this.inputHandler.ifBlockedByIntersect({point:position, margin:0,  cameraPos:target}   /* {point:target, margin: 0.2,  cameraPos:position} */)  
                      
                     if(intersect){ 
                         position.copy(intersect.location) 

+ 4 - 4
src/navigation/InputHandlerNew.js

@@ -803,14 +803,14 @@ export class InputHandler extends THREE.EventDispatcher {
         return { 
             camera, viewport, pointer 
         }
-    }
+    } 
 
 
-    ifBlockedByIntersect({pos3d, margin=0, cameraPos, pickWindowSize, pano, useDepthTex, viewport}={}){//某点是否被遮挡(不允许camera修改位置, 因为depthTex不好置换)
+    ifBlockedByIntersect({point, margin=0, cameraPos, pickWindowSize, pano, useDepthTex, viewport}={}){//某点是否被遮挡(不允许camera修改位置, 因为depthTex不好置换)
         viewport = viewport || this.hoverViewport || viewer.mainViewport
-        let intersect = this.getIntersect({viewport, onlyGetIntersect:true, pickWindowSize,  useDepthTex,  pos3d, cameraPos, pano })
+        let intersect = this.getIntersect({viewport, onlyGetIntersect:true, pickWindowSize,  useDepthTex,  point, cameraPos, pano })
         let cameraPos_ = (!cameraPos && pano) ? pano.position : (cameraPos||viewport.view.position)
-        if(intersect && intersect.distance+margin <= pos3d.distanceTo(cameraPos_)){
+        if(intersect && intersect.distance+margin <= point.distanceTo(cameraPos_)){
             return intersect //被遮挡
         }
         //点云模式,对没加载出的点云不准确。 尤其是需要修改相机位置时,因临时修改并不能使点云加载。