Browse Source

fix: updateCamNear

xzw 10 months ago
parent
commit
20a9fae022
1 changed files with 41 additions and 8 deletions
  1. 41 8
      src/sdk/cover/index.js

+ 41 - 8
src/sdk/cover/index.js

@@ -67,7 +67,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
 
             updateMap()
-        }
+            
+            Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
+                updateCamNear() 
+            }, 1000)
+             
+        } 
     })
     
      
@@ -92,6 +97,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 changeMeshVisi(model, true)
                 //MergeEditor.selectModel(model)
                 //model.result_.flyInPano(e.toPano.pano, {dontFly:true})   //切换模型显示,因为flyInPano有事件怕乱所以统一用这个函数            
+                updateCamNear()
             }
             
         })
@@ -127,6 +133,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         })
         
         Potree.settings.unableNavigate = e.mode == 'showPointCloud'
+        updateCamNear()
     })
     
     
@@ -136,6 +143,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
             viewer.setControls(viewer.orbitControls)
             viewer.removeEventListener('camera_changed', camera_changed)
+             
         }
     }
     let requestInPano = false
@@ -886,6 +894,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                     if (model) {
                         let fly = viewer.images360.latestRequestMode != 'showPanos'
                         MergeEditor.selectModel(model, state, fly, true)
+                        updateCamNear()
  
                         //console.log('changeSelect',  props.id, state)
                     }
@@ -1409,19 +1418,43 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
     
     
-    /* updateCamNear(){
-        let near = 0.0001, far = 0.1
-        
-        Potree.config.view.near = 0.0001 //以防有的漫游场景模型缩放的很小(0.1%)  但似乎会造成z-fighting,不记得之前是否有过bug
+    function updateCamNear(type){// 有的漫游场景模型缩放的很小(0.1%),需要缩小near才能看见,  但会造成z-fighting, 离远了看大模型会闪烁
+        const min = 0.0001, max = 0.1
+        let near , bigScale = 0.2 
     
-        if(Potree.settings.displayMode == 'showPanos'){
+        if(Potree.settings.displayMode == 'showPanos'/*  && type != 'cameraMove'  */){
+            let currentModel = viewer.images360.currentPano.pointcloud
+            near = Potree.math.linearClamp(currentModel.scale.x, [0, 1],   [min,  max]) 
             
+        }else/*  if(type == 'cameraMove') */{
+            //没有完美的解决方式,优先考虑选中的模型。否则优先考虑离得近的。 另外尽量用大的,因为缩很小的情况很少。
+            //虽然案例说应该看model.bound.size,但如果非场景模型,缩很小的话也不需要凑近看。
+            let allModels = viewer.objs.children.concat(viewer.scene.pointclouds)
+            if(allModels.length == 0)return
+            allModels.sort((a,b)=>{return a.scale.x - b.scale.x})
             
+            let minS = allModels[0].scale.x,  maxS = allModels.pop().scale.x
+            let considerModel  
+            if(minS>bigScale) near = max 
+            else{ 
+                if(MergeEditor.selected){
+                     considerModel = MergeEditor.selected
+                     near = Potree.math.linearClamp(considerModel.scale.x, [0, bigScale],   [min,  max]) 
+                }else{
+                     //allModels = allModels.filter()  //写不下去了好难,就算了吧, 折中 
+                     near = Potree.math.linearClamp(minS, [0, bigScale],   [max/4,  max]) 
+                }   
+            }  
         }
         
+        if(near != viewer.mainViewport.camera.near){
+            console.log('updateNear',near)
+            viewer.mainViewport.camera.near = near
+            viewer.mainViewport.camera.updateProjectionMatrix()
+            viewer.dispatchEvent('content_changed')
+        }
         
-        
-    } */
+    } 
 
     function updateMap( ){