xzw %!s(int64=2) %!d(string=hai) anos
pai
achega
b16f66eaac

+ 4 - 1
src/ExtendPointCloudOctree.js

@@ -565,7 +565,10 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                 }else{
                     
                     let base = this.material.spacing / Math.pow(2, this.maxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2.  (不同场景还是会有偏差)
-                    base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(this.maxLevel /  nodeMaxLevel, 1.4)) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
+                    let r = this.maxLevel /  nodeMaxLevel  //越大,越精细,需要越缩小
+                    base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(r, 3*r+0.3 )) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
+                    
+                    //base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(this.maxLevel /  nodeMaxLevel, 1.1)) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
 
                     size = base * 5 * num_/*  * window.devicePixelRatio */
                     //在t-8BCqxQAr93 会议室 和 t-e2Kb2iU 隧道 两个场景里调节,因为它们的spacing相差较大,观察会议室墙壁的龟裂程度

+ 2 - 2
src/custom/modules/panos/Images360.js

@@ -462,7 +462,7 @@ export class Images360 extends THREE.EventDispatcher{
                 },
                 set: function(e) {
                     if(e != currentPano){
-                        //console.log('set currentPano ', e.id)
+                         console.log('set currentPano ', e.id)
                         currentPano && currentPano.exit()
                         e && e.enter()
                         currentPano = e
@@ -632,7 +632,7 @@ export class Images360 extends THREE.EventDispatcher{
 
 	cancelFlyToPano(toPano){//取消当前已有的飞行准备,前提是相机还未移动 
         if(viewer.mainViewport.view.isFlying() || toPano && this.latestToPano != toPano)return
-        //Potree.Log('cancelFlyToPano', this.latestToPano && this.latestToPano.pano.id)
+        Potree.Log('cancelFlyToPano', this.latestToPano && this.latestToPano.pano.id)
         this.nextPano = null 
         this.latestToPano = null 
     }

+ 11 - 5
src/custom/modules/panos/Panorama.js

@@ -4,6 +4,7 @@ import TileUtils from './tile/TileUtils.js'
                                                                                    
 import math from '../../utils/math.js' 
 import {TextSprite} from '../../objects/TextSprite.js'
+import Sprite from '../../objects/Sprite.js'
 import DepthBasicMaterial from "../../materials/DepthBasicMaterial.js"; 
 
 let { PanoRendererEvents, PanoramaEvents, PanoSizeClass} = Potree.defines
@@ -288,11 +289,16 @@ class Panorama extends THREE.EventDispatcher{
             //this.quaternion = quaternion
         } 
          
-        let marker = new THREE.Mesh(planeGeo, this.getMarkerMat() ) 
+        /* let marker = new THREE.Mesh(planeGeo, this.getMarkerMat() ) 
+            
+            //marker.lookAt(marker.up) 
+            marker.scale.set(2,2,2)  */
+            
+        let marker = new Sprite({mat:this.getMarkerMat(), dontFixOrient:true })
+            marker.scale.set(0.4,0.4,0.4)
             marker.name = 'marker_'+this.id
             marker.up.set(0,0,1)
-            marker.lookAt(marker.up) 
-            marker.scale.set(2,2,2) 
+            
         this.addEventListener('changeMarkerTex',(e)=>{
             marker.material.map = markerTex[e.name]  
         })    
@@ -557,8 +563,8 @@ class Panorama extends THREE.EventDispatcher{
         this.marker.add(this.label2)
         
         //this.floorPosition && this.label2.position.copy(this.floorPosition)
-        let s = 0.2
-        this.label2.scale.set(s,s,s)
+        //let s = 0.25
+        //this.label2.scale.set(s,s,s)
         Potree.Utils.updateVisible(this.label2, 'notDisplay', false)
         //Potree.Utils.updateVisible(this.label2, 'panoVisi', this.visible)
         

+ 2 - 2
src/custom/settings.js

@@ -108,12 +108,12 @@ const config = {//配置参数   不可修改
         }, 
         
         fourViewports:{//分四屏时防止卡顿
-            maxLevelPercent: 0.8,  
+            maxLevelPercent: 0.9,  
             pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
             minNodeSize : 70,
         }, 
         fourViewportsMain:{//分四屏时防止卡顿
-            maxLevelPercent: 0.8,  
+            maxLevelPercent: 0.9,  
             pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
             minNodeSize : 70,
         }   

+ 19 - 2
src/custom/utils/SplitScreen4Views.js

@@ -90,7 +90,7 @@ SplitScreen4Views.split = function(o={}){
         
         position: viewer.images360.position,
         target: viewer.scene.view.getPivot(),
-         
+        currentPano: viewer.images360.currentPano,
         
         //---
         //ifShowMarker : Potree.settings.ifShowMarker, 
@@ -143,7 +143,19 @@ SplitScreen4Views.split = function(o={}){
                 //侧面重叠概率更大,所以透明度调小
                 e.changePointOpacity(this.name == "mapViewport" ? 0.2 : 0.06/* newOpacityMap.get(e).get(viewport), true */);  //多数据集有的数据集很小,放大后显示特别淡
                 //console.log(e.name, viewport.name, e.temp.pointOpacity, e.material.opacity)
-            }                 
+            } 
+            
+            
+            viewer.images360.panos.forEach(pano=>{
+                if(this.name == 'mapViewport'){
+                    Potree.Utils.updateVisible(pano.marker, 'showOnMap', true, 1, 'add'  ) 
+                }else{
+                    Potree.Utils.updateVisible(pano.marker, 'showOnMap', false, 1, 'cancel'  ) 
+                }
+            })
+ 
+
+            
         })  
     }    
     viewports.forEach(viewport=>{viewport.beforeRender = beforeRender})
@@ -178,6 +190,7 @@ SplitScreen4Views.recover = function(){
     viewer.setView({
         position: this.statesBefore.position,
         target: this.statesBefore.target,
+        currentPano: this.statesBefore.currentPano,
         duration:300,
         callback:function(){ 
         }
@@ -224,6 +237,10 @@ SplitScreen4Views.recover = function(){
     viewer.setPointStandardMat(false)
     viewer.mapViewer.setViewLimit('standard')
     
+    viewer.images360.panos.forEach(pano=>{ 
+        Potree.Utils.updateVisible(pano.marker, 'showOnMap', false, 1, 'cancel'  )  
+    })
+
     //Potree.settings.ifShowMarker = this.statesBefore.ifShowMarker
     //viewer.dispatchEvent({'type': 'finishSplitView' }) 
     //viewer.updateScreenSize({forceUpdateSize:true})  

+ 2 - 1
src/custom/viewer/ViewerNew.js

@@ -1106,7 +1106,7 @@ export class Viewer extends ViewerBase{
             o.sin = o.sin || Math.sqrt(Math.abs(camPos.z - pano.marker.position.z) / o.dis) //和地面夹角的sin。 按公式是不加Math.sqrt的,但是这样大马路上在贴近地面时算出的个数非常少,所以增大点……
             return o.dis < maxDis * o.sin 
         }
-        
+         
         
         viewer.images360.panos.forEach(pano=>{//minRadius内的记录为可见 
             let o = {}           
@@ -4444,6 +4444,7 @@ export class Viewer extends ViewerBase{
             if(o.displayMode){
                 Potree.settings.displayMode = o.displayMode
             }
+            if(!o.pano && o.currentPano )this.images360.currentPano = o.currentPano
             o.callback && o.callback()
         } 
         

+ 3 - 3
src/navigation/InputHandlerNew.js

@@ -779,9 +779,9 @@ export class InputHandler extends THREE.EventDispatcher {
 
 
     ifBlockedByIntersect({pos3d, margin=0, cameraPos, pickWindowSize, pano, useDepthTex}={}){//某点是否被遮挡(不允许camera修改位置, 因为depthTex不好置换)
-          
-        let intersect = this.getIntersect(this.hoverViewport, true, pickWindowSize, null, null, useDepthTex, {pos3d, cameraPos, pano})
-        let cameraPos_ = (!cameraPos && pano) ? pano.position : (cameraPos||this.hoverViewport.view.position)
+        let viewport = this.hoverViewport || viewer.mainViewport
+        let intersect = this.getIntersect(viewport, true, pickWindowSize, null, null, useDepthTex, {pos3d, cameraPos, pano})
+        let cameraPos_ = (!cameraPos && pano) ? pano.position : (cameraPos||viewport.view.position)
         if(intersect && intersect.distance+margin <= pos3d.distanceTo(cameraPos_)){
             return intersect //被遮挡
         }