Browse Source

fix:地图

xzw 1 year ago
parent
commit
de8427fb27
3 changed files with 58 additions and 39 deletions
  1. 20 17
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 37 21
      src/sdk/cover/index.js

+ 20 - 17
public/lib/potree/potree.js

@@ -5348,6 +5348,11 @@
 	          this.dispatchEvent('flyCancel');
 	        }, info.ignoreFirstFrame);
 	      }
+	      if (!posWaitDone && !rotWaitDone) {
+	        //已经到达目标
+	        info.onUpdate && info.onUpdate(1);
+	        done();
+	      }
 
 	      /*  transitions.start(lerp.vector(this.position, endPosition, (pos, progress)=>{
 	      let t = progress 
@@ -21187,9 +21192,7 @@
 	        if (!Potree.settings.UserPointDensity) {
 	          Potree.settings.UserPointDensity = 'high'; //'middle' 
 	        }
-	        Potree.Log('loadPointCloudDone  点云加载完毕', {
-	          font: [null, 10]
-	        });
+	        Potree.Log('loadPointCloudDone  点云加载完毕');
 	      }
 	      {
 	        //初始位置 
@@ -21428,7 +21431,10 @@
 
 	      pointcloud.updateMatrixWorld();
 	      Potree.Log("\u70B9\u4E91".concat(pointcloud.dataset_id, "(").concat(pointcloud.name, ")\u65CB\u8F6C\u503C:").concat(pointcloud.orientationUser, ", \u4F4D\u7F6E").concat(math.toPrecision(pointcloud.translateUser.toArray(), 3), ", \u7ECF\u7EAC\u5EA6 ").concat(dataset.location, ", spacing ").concat(pointcloud.material.spacing), {
-	        font: [null, 13]
+	        font: {
+	          color: "#5af",
+	          fontSize: 13
+	        }
 	      });
 	    };
 	    if (!Potree.settings.originDatasetId) Potree.settings.originDatasetId = data[0].id;
@@ -21557,7 +21563,9 @@
 	        var pointcloud = viewer.scene.pointclouds.find(p => p.dataset_id == dataset.id);
 	        if (!pointcloud) {
 	          Potree.Log('数据集id变了,自动使用第一个', {
-	            font: ['#500']
+	            font: {
+	              color: '#500'
+	            }
 	          });
 	          pointcloud = viewer.scene.pointclouds[0];
 	        }
@@ -21677,9 +21685,7 @@
 	      boundSize,
 	      center
 	    } = viewer.bound;
-	    Potree.Log("\u4E2D\u5FC3\u70B9: ".concat(math.toPrecision(center.toArray(), 2), ", boundSize: ").concat(math.toPrecision(boundSize.toArray(), 2), " "), {
-	      font: [null, 12]
-	    });
+	    Potree.Log("\u4E2D\u5FC3\u70B9: ".concat(math.toPrecision(center.toArray(), 2), ", boundSize: ").concat(math.toPrecision(boundSize.toArray(), 2), " "));
 	    viewer.scene.view.setView({
 	      position: center.clone().add(new Vector3(10, 5, 10)),
 	      target: center
@@ -21831,9 +21837,7 @@
 	          if (!Potree.settings.UserPointDensity) {
 	            Potree.settings.UserPointDensity = 'high'; //'middle' 
 	          }
-	          Potree.Log('loadPointCloudDone  点云加载完毕', {
-	            font: [null, 10]
-	          });
+	          Potree.Log('loadPointCloudDone  点云加载完毕');
 	        }
 	        viewer.dispatchEvent('allLoaded');
 	        done(pointcloud);
@@ -25535,7 +25539,7 @@
 
 	    //raycaster.layers.enableAll()//add
 	    var layers = ['sceneObjects', 'mapObjects', 'measure', 'transformationTool', 'model', 'bothMapAndScene']; //设置能识别到的layers(如空间模型里只有mapViewer能识别到marker)
-	    if (Potree.settings.mergeType2 && Potree.settings.displayMode == 'showPanos' && !viewer.images360.currentPano.pointcloud.hasDepthTex) layers.push('skybox'); //model变成skybox了
+	    if (Potree.settings.mergeType2 && Potree.settings.modelSkybox && Potree.settings.displayMode == 'showPanos' && !viewer.images360.currentPano.pointcloud.hasDepthTex) layers.push('skybox'); //model变成skybox了
 	    Potree.Utils.setCameraLayers(raycaster, layers, this.hoverViewport && this.hoverViewport.extraEnableLayers);
 
 	    //this.hoverViewport.beforeRender && this.hoverViewport.beforeRender()
@@ -26993,9 +26997,8 @@
 	      clipDistance: 2,
 	      occlusionDistance: 1,
 	      //不能设置太短,因为过渡时深度不准确 
-	      useDepth: !!(Potree.settings.mergeType2 || Potree.settings.useDepthTex && this.pointcloud.hasDepthTex),
+	      useDepth: !!(Potree.settings.useDepthTex && this.pointcloud.hasDepthTex || Potree.settings.modelSkybox && this.pointcloud.is4dkkModel),
 	      autoDepthTest: true
-
 	      //改为DepthBasicMaterial是因为原Basic的材质在有深度图时过渡会先隐藏后出现。 注:没有深度图时全景模式的marker无法遮挡
 	    });
 	    mat.mapTransparent = true;
@@ -30298,7 +30301,7 @@
 	      this.cube.layers.set(Potree.config.renderLayers.skybox);
 	      this.cube.name = 'skyboxCube';
 	      viewer.scene.scene.add(this.cube);
-	      if (Potree.settings.mergeType2) {
+	      if (Potree.settings.mergeType2 && Potree.settings.modelSkybox) {
 	        this.materialInside = new ModelTextureMaterial();
 	        this.materialInside.dontChangeDepth = true; //chunk本身深度是对的,不用深度图,否则过渡会有很多裂痕
 	        this.cube.material.defines.depth_background = ''; //skybox的深度改得向后一些, 避免盖住chunk,造成坑坑洼洼
@@ -30739,7 +30742,7 @@
 	    });
 	  }
 	  judgeModelMat(object) {
-	    if (!Potree.settings.mergeType2) return;
+	    if (!(Potree.settings.mergeType2 && Potree.settings.modelSkybox)) return;
 	    object.traverse(mesh => {
 	      if (mesh.material) {
 	        if (!mesh.materialOutside) {
@@ -64284,7 +64287,7 @@
 	    if (!params.magnifier) {
 	      if (Potree.settings.displayMode == 'showPanos' || Potree.settings.testCube) {
 	        Potree.Utils.setCameraLayers(camera, ['skybox']);
-	        if (Potree.settings.displayMode == 'showPanos' && (viewer.images360.currentPano.pointcloud.hasDepthTex || Potree.settings.mergeType2) && rtEDL) {
+	        if (Potree.settings.displayMode == 'showPanos' && (viewer.images360.currentPano.pointcloud.hasDepthTex || Potree.settings.modelSkybox && viewer.images360.currentPano.pointcloud.is4dkkModel) && rtEDL) {
 	          //渲染深度图
 
 	          renderer.setRenderTarget(rtEDL); //将带有深度图的skybox画在rtEDL一下,这样就不需要绘制后边的点云了

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


+ 37 - 21
src/sdk/cover/index.js

@@ -35,11 +35,14 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
     Potree.settings.compassDom = dom.querySelector('#direction')
     Potree.settings.showObjectsOnMap = true
     Potree.settings.mergeType2 = true //标识新版
+    Potree.settings.modelSkybox = false //是否将全景图贴在模型上(会导致卡顿)。若不显示模型将不显示Reticule
+    
+    
     
     let {THREE} = Potree.mergeEditStart(dom, mapDom)
     let MergeEditor = viewer.modules.MergeEditor
     Potree.settings.unableNavigate = false
-    Potree.settings.showCesium = true
+    Potree.settings.showCesium = false
     if(Potree.settings.showCesium){ 
         
         viewer.backgroundOpacity = 0 
@@ -91,7 +94,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
         if (e.viewport.name == 'MainView') {
             sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
           
-            if(Potree.settings.showCesium){
+            if(Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud'){
                   
                 let pPos    = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
                 let pRight  = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
@@ -340,7 +343,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
             viewer.removeEventListener('camera_changed', camera_changed)
         }
     }
-    
+    let requestInPano = false
     
     
     
@@ -662,8 +665,12 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
                 prop.maximumScreenSpaceError = 60
                 Potree.addModel(prop,  prop.done , prop.progressFun, prop.onError)
                 prop.loading = true
-                console.log('-------开始加载 id:', prop.id, 'title:', prop.title, ', filename:', Potree.Common.getNameFromURL(prop.url),  prop ) 
-            }
+                
+                Potree.Log(`--开始加载--`, {
+                    font: {color: '#f68' }
+                });
+                console.log('id:', prop.id, 'title:', prop.title, ', filename:', Potree.Common.getNameFromURL(prop.url),  prop ) 
+             }
             
             let spliceFromArr = (model,loaded)=>{
                 //let autoLoads.find()
@@ -784,33 +791,39 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
                     return model.panos && model.panos.length > 0 
                 },
                 flyInPano(){//  飞入全景图
-                    let pano = viewer.images360.findNearestPano(null,model.panos)
-                    if(pano){
+                    requestInPano = model
+                    let pano = viewer.images360.findNearestPano(null, model.panos)
+                    if(pano){ 
                         viewer.removeEventListener('camera_changed', camera_changed)
                         viewer.images360.panos.forEach(pano=>{
                             pano.setEnable(pano.pointcloud == model )
                         })
                         viewer.setControls(viewer.fpControls)
-                        viewer.images360.flyToPano({pano, canCancelLast:true}) 
-                        
+                        MergeEditor.transformControls.detach(model)
+                        Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',false)
+                         
                         let changeVisi = (object)=>{
-                            Potree.Utils.updateVisible(object, 'showPanos', object == model)
+                            Potree.Utils.updateVisible(object, 'showPanos', object == model && Potree.settings.modelSkybox )
                         }
+                          
                         
+                        let eventName = Potree.settings.displayMode != 'showPanos' ? 'endChangeMode' : 'flyToPanoDone'
+                        viewer.images360.addEventListener(eventName,(e)=>{  
+                            if(Potree.settings.displayMode == 'showPanos' && requestInPano == model) {
+                                //Potree.Utils.updateVisible(viewer.objs, 'showPanos', false) 
+                                viewer.objs.children.forEach(changeVisi)
+                            }
+                        },{once:true})
                          
+                        viewer.images360.flyToPano({pano, canCancelLast:true})  
                         Potree.settings.displayMode = 'showPanos' 
-                        MergeEditor.transformControls.detach(model)
-                        Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',false)
-                        
+                         
                         
-                        viewer.images360.addEventListener('endChangeMode',()=>{ 
-                            //Potree.Utils.updateVisible(viewer.objs, 'showPanos', false)
-                            viewer.objs.children.forEach(changeVisi)
-                        },{once:true})  
                         
                     }
                 },
                 flyOutPano(){//  飞出全景图(就是切换到正常融合视角)
+                    requestInPano = false
                     let panoPos = viewer.images360.position.clone()
                     //Potree.Utils.updateVisible(viewer.objs, 'showPanos', true)
                     let changeVisi = (object)=>{
@@ -820,10 +833,13 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
                     viewer.images360.panos.forEach(pano=>{
                         pano.setEnable(true)
                     })
-                     
-                    Potree.settings.displayMode = 'showPointCloud'
-                    Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',true)
-                     
+                    
+                    setTimeout(()=>{//在下一帧再变,因为3dtiles需要更新一下才会显示tiles 
+                        if(!requestInPano){
+                            Potree.settings.displayMode = 'showPointCloud'
+                            Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',true)
+                        }
+                    },50)
                     
                     viewer.addEventListener('camera_changed', camera_changed) 
                 },