xzw vor 2 Jahren
Ursprung
Commit
d0ca4b1c44

+ 68 - 83
public/static/lib/potree/potree.js

@@ -762,8 +762,7 @@
         zoom:{
             enabled : true,
             min:1,
-            max: config$1.highQualityMaxZoom,
-            activationThreshold: 1.1,
+            max: config$1.highQualityMaxZoom 
         },
         navConstantly:true,
         navTileClass: browser.isMobile() ? '1k' : '2k',  //默认加载到
@@ -64997,11 +64996,12 @@ void main() {
 
     const Buttons = {// MouseEvent.buttons
         //buttons,设置按下了鼠标哪些键,是一个3个比特位的二进制值,默认为0。1表示按下主键(通常是左键),2表示按下次要键(通常是右键),4表示按下辅助键(通常是中间的键)。
-    	NONE:0,//add
-        
+    	NONE:0,//add 
         LEFT: 0b0001,
     	RIGHT: 0b0010,
-    	MIDDLE: 0b0100
+    	MIDDLE: 0b0100,
+        'L+R': 0b0011
+        
     };
     /*  如果访问的是button, 用THREE.MOUSE来判断:
         button,设置按下了哪一个鼠标按键,默认为0。-1表示没有按键,0表示按下主键(通常是左键),1表示按下辅助键(通常是中间的键),2表示按下次要键(通常是右键)
@@ -68253,7 +68253,7 @@ void main() {
                 this.nodeMaxLevel = level; 
                 //viewer.dispatchEvent({type:'updateNodeMaxLevel', pointcloud: this, nodeMaxLevel:level}) 
                  
-                 console.log('updateNodeMaxLevel ' + this.dataset_id + " : "+ this.nodeMaxLevel);                
+                //console.log('updateNodeMaxLevel ' + this.dataset_id + " : "+ this.nodeMaxLevel)                
                   
                 this.setPointLevel();//重新计算
                  
@@ -84427,8 +84427,8 @@ void main() {
                     } 
                 }else {
                     //mode = e.buttons === Buttons.LEFT && (!e.dragViewport || e.dragViewport.name == 'MainView') ? 'rotate' : 'pan'
-                    mode = e.buttons === Buttons.LEFT && camera.type != 'OrthographicCamera' ? 'rotate' : 'pan';
-                }
+                    mode = (e.buttons === Buttons.LEFT || e.buttons === Buttons['L+R']) && camera.type != 'OrthographicCamera' ? 'rotate' : 'pan';
+                }//加'L+R'是因鼠标有时候出问题
                 //console.log('mode  ', mode )
                 let moveSpeed = this.currentViewport.getMoveSpeed();
                 if (e.drag.startHandled === undefined) {///???????
@@ -85091,9 +85091,9 @@ void main() {
                 this.yawDelta = 0;
                 this.pitchDelta = 0; 
     		}
-            if(this.translationWorldDelta.length()>0) {
+            /* if(this.translationWorldDelta.length()>0) {
                // console.log('translationDelta')
-            }
+            } */
 
     		{ // apply translation
     			view.translate(
@@ -86151,7 +86151,10 @@ void main() {
         
         
         onMouseMove (e) { 
-            return this.dealPointerMove( e )
+            /* if(e.buttons != 1&&e.buttons != 0){
+                console.log(e.buttons)
+            } */
+            return this.dealPointerMove(  e )
         }
 
         dealPointerMove(e, isTouch){ 
@@ -88511,8 +88514,11 @@ void main() {
             return this.getPanoSize(e)
         }
 
-        detectMaxZoomPanoSize() { 
-            if(this.zoomLevelResolution){
+        detectMaxZoomPanoSize() { //获取当前zoomRenderTarget应下载的最高级别
+        
+            //若是有三个级别,每次只需要加载到当前的zoomLevel;而两级时因为有zoomed来判断是使用基本贴图还是zoomRenderTarget,所以只需要返回最大的即可
+                
+            if(this.zoomLevelResolution){//有三个级别
                 if(this.zoomLevelResolution == '4k' && this.useUltraHighResolutionPanos){
                     return this.getPanoSize(PanoSizeClass.ULTRAHIGH);
                 }else if(this.zoomLevelResolution == '1k' || !this.useHighResolutionPanos){
@@ -90323,7 +90329,7 @@ void main() {
                 r && this.deactiveDescripor(r.renderTarget); 
                 r = this.activeDescripor(l);  
                 if (!r) { 
-                    var ren = this.initTiledPano(l, true); 
+                    var ren = this.initTiledPano(l, !browser.isMobile()); 
                     r = this.initDescriptor(ren.width);
                     r.renderTarget = ren;
                 }
@@ -90448,7 +90454,7 @@ void main() {
             texture.minFilter = LinearFilter);   
             
             //平时还是直接用LinearMipMapLinearFilter,其实并非不清晰,只是没有加锐化,像加了层柔光和抗锯齿,观感更好。放大后使用LinearFilter
-            
+            // 如果抗锯齿的话,采用mipmap,会增加一倍的存储消耗。原版本都是不抗锯齿的。但是抗锯齿效果更柔和
             
             
             renderTarget.texture = texture; //居然漏了一句,2022.10.9补
@@ -90931,7 +90937,7 @@ void main() {
                 if(targets[size]){
                     this.zoomRenderTarget = targets[size];
                 }else {
-                    this.zoomRenderTarget = this.initTiledPano(size, false  );
+                    this.zoomRenderTarget = this.initTiledPano(size, false  ); //放大后不使用抗锯齿,否则消
                     targets[size] = this.zoomRenderTarget;
                 }
                 
@@ -91959,7 +91965,8 @@ void main() {
                             
                                 
                             if(config2.showSkybox || config2.pointUsePanoTex){ 
-                                let wait = ()=> {
+                                let wait = (e)=> {
+                                    if(e.pano && e.pano != this.currentPano)return//loadedDepthImg
                                     setTimeout( ()=>{
                                         if(latestRequestMode == mode ){
                                             Potree.settings.displayMode = mode; 
@@ -92309,7 +92316,7 @@ void main() {
                 this.dispatchEvent({type:'flyToPano', toPano});
                 return done(true);
             }
-            if(this.latestToPano && this.latestToPano != toPano){
+            if(this.latestToPano && this.latestToPano != toPano){//还在飞
                 return done(false)
             }
             
@@ -92335,7 +92342,8 @@ void main() {
             
             {//不飞的话是否不要执行这段?
                 
-                let wait = ()=> {
+                let wait = (e)=> {
+                    if(e.pano && this.latestToPano && e.pano != this.latestToPano.pano)return//loadedDepthImg
                     if(this.latestToPano != toPano)return Potree.Log('已经取消')//如果取消了
                     setTimeout(()=>{ 
                         if(this.latestToPano != toPano)return
@@ -93376,7 +93384,7 @@ void main() {
                     });
                     
                     //剔除那些突然间离相机很近的dir。有可能是拍摄的人、或者杆子、树
-                    const maxRatio = 8;  
+                    
                     /* dirs2.forEach((e,i)=>{
                         console.log(i,  e.dis)
                         let smallThanBefore = ()=>{
@@ -93398,6 +93406,7 @@ void main() {
                         }                        
                         
                     }) */
+                    const maxRatio1 = 3  , maxRatio2 = 8;  //超过maxRatio1就要加入判断,而最终结果的设限其实是maxRatio2 
                     const minWidth = 0.5; 
                     let computeWidth = (start,end)=>{
                         start+=1; //不包含start和end
@@ -93415,21 +93424,28 @@ void main() {
                         start+=1; //不包含start和end
                         for(let m=start;m<end;m++){ 
                             dirs2[m].disB = dirs2[end].dis * 0.8;
-                            console.log('changeDis', m, dirs2[m].disB); 
+                            //console.log('changeDis', m, dirs2[m].disB) 
                         }
                     };
                     let start = -1; 
                     for(let i=0;i<count1;i++){//遍历时将左边dis比之小很多且宽度较小的改大 
                         //console.log(i, dirs2[i].dis) 
                         let j = i-1;
-                        while(j>start && dirs2[i].dis / dirs2[j].dis > maxRatio){
-                            j--;    
-                        } 
-                        let count = i-j;
-                        if(count > 1 && (count == 2 || computeWidth(j,i)<minWidth)){//若只有一个不用判断宽度直接修改,count == 2 即只有一个
+                        let ratios = 0;
+                        while(j>start && dirs2[i].dis / dirs2[j].dis > maxRatio1){
+                            ratios += dirs2[i].dis / dirs2[j].dis; 
+                            j--;  
+                        }  
+                        let count = i-j-1;
+                        ratios /= count;
+                        if(count > 0 && computeWidth(j,i)< minWidth * ratios / maxRatio2  ){
                             changeDis(j,i);  
                             start = i;  //在此之前的修改过,之后不用再判断
                         }
+                        /* if(count > 0  && (count == 1 || computeWidth(j,i)<minWidth)){//若只有一个不用判断宽度直接修改
+                            changeDis(j,i)  
+                            start = i  //在此之前的修改过,之后不用再判断
+                        } */
                     } 
                      
                      
@@ -94274,50 +94290,34 @@ void main() {
     	}
         
         
-        /* zoomDefault{
-            this.zoomTo(1, !0)
-        } 
-        smoothZoomToDefault(e, t) {
-            var i, n = this.zoomLevel,
-                r = function(e) {
-                    e > 1 && (e = 1),
-                        i = n * (1 - e) + e,
-                        this.zoomTo(i, !0)
-                }
-                .bind(this),
-                o = function() {
-                    this.zoomDefault(),
-                        t && window.setTimeout(t, 50)
-                }
-                .bind(this);
-            transitions.start(r, e, o, null, 0, easing[settings.transition.blendEasing])
-        } */
-
+      
         
 
         updateZoomPano() { 
             if (!this.panoRenderer.zoomPanoRenderingDisabled && Potree.settings.displayMode == 'showPanos') {
                 var currentPano = this.currentPano;
                 if (currentPano) {
-                    var activationThreshold =  Potree.settings.navTileClass == '2k' && Potree.settings.tileClass == '4k' ? 1.7 : Potree.settings.zoom.activationThreshold;//1.1
-                    var t = this.zoomLevel > activationThreshold,
+                    
+                    let levelThreshold1 = Potree.settings.navTileClass == '1k' ? 1.3 : 1.7 , levelThreshold2 = 2;
+                     
+                    var t = this.zoomLevel > levelThreshold1,
                         n = !(this.flying && this.nextPano && this.nextPano !== this.currentPano),
                         r = t && n;
                     this.tileDownloader.tilePrioritizer.setZoomingActive(r);
                     this.panoRenderer.setZoomingActive(r, currentPano, !0);
                     
-                    var o = (pano, zoomedFlag)=>{
+                    var o = (pano, ifZoom)=>{
                         this.panoRenderer.resetRenderStatus(pano.id, !1, !0, this.qualityManager.getMaxNavPanoSize());
                         this.panoRenderer.clearAllQueuedUploadsForPano(pano.id);
                         this.panoRenderer.renderPanoTiles(pano.id, null, !1, !1);
-                        pano.setZoomed(zoomedFlag);
+                        pano.setZoomed(ifZoom);
                     };
                       
                     
-                    if (r && (!currentPano.zoomed || this.qualityManager.zoomLevelResolution && this.qualityManager.zoomLevelResolution != '4k')) {
+                    if (r && (!currentPano.zoomed || this.qualityManager.zoomLevelResolution && this.qualityManager.zoomLevelResolution != '4k')) {//needZoom
                         currentPano.zoomed || o(currentPano, !0); 
                         
-                        if(Potree.settings.navTileClass == '1k' && Potree.settings.tileClass != '1k' && this.zoomLevel < 2){
+                        if(Potree.settings.navTileClass == '1k' && Potree.settings.tileClass != '1k' && this.zoomLevel < levelThreshold2){
                             this.panoRenderer.enableHighQuality( function() {//开启2k 
                                 if(Potree.settings.tileClass != '4k')  o(currentPano, !0); 
                             }.bind(this));
@@ -94333,23 +94333,23 @@ void main() {
                     
                     
                     
-                    if(r && Potree.settings.navTileClass == '1k' && Potree.settings.tileClass == '4k'  ){ //目前只有手机端navTileClass == '1k'
+                    if(r && Potree.settings.navTileClass == '1k' && Potree.settings.tileClass == '4k'  ){ //目前只有手机端navTileClass == '1k' (分三个梯度)
                         var change = (zoomedFlag)=>{ 
                             this.qualityManager.updateMaximums();//更新maxZoomPanoSize
                             this.panoRenderer.setupZoomRenderTarget(); //更新renderTarget  
                             //currentPano.setZoomed(t);//更新uniforms贴图 
                         };
-                        this.qualityManager.zoomLevelResolution = this.zoomLevel >= 2 ? '4k' : this.zoomLevel > 1.1 ? '2k' : '1k';
+                        this.qualityManager.zoomLevelResolution = this.zoomLevel >= levelThreshold2 ? '4k' : this.zoomLevel > levelThreshold1 ? '2k' : '1k';
                         
-                        if(this.oldZoomLevel < 2 && this.zoomLevel >= 2){//1k/2k-4k
+                        if(this.oldZoomLevel < levelThreshold2 && this.zoomLevel >= levelThreshold2){//1k/2k-4k
                             change();
                             o(currentPano, t);
-                        }else if(this.oldZoomLevel <= Potree.settings.zoom.activationThreshold && this.zoomLevel > Potree.settings.zoom.activationThreshold){//1k-2k
+                        }else if(this.oldZoomLevel <= levelThreshold1 && this.zoomLevel > levelThreshold1){//1k-2k
                             change();
-                        }else if(this.oldZoomLevel > 2 && this.zoomLevel <= 2){//4k-2k/1k
+                        }else if(this.oldZoomLevel > levelThreshold2 && this.zoomLevel <= levelThreshold2){//4k-2k/1k
                             change();
                             o(currentPano, t);
-                        }else if(this.oldZoomLevel > Potree.settings.zoom.activationThreshold && this.zoomLevel <= Potree.settings.zoom.activationThreshold){//2k-1k
+                        }else if(this.oldZoomLevel > levelThreshold1 && this.zoomLevel <= levelThreshold1){//2k-1k
                             change(); 
                         } 
                         this.oldZoomLevel = this.zoomLevel;  
@@ -94387,7 +94387,7 @@ void main() {
                             
                             if(Potree.settings.isTest){
                                 var colorHue = Math.random();
-                                tile.material.color = (new Color()).setHSL(colorHue, 0.5, 0.9);  
+                                tile.material.color = (new Color()).setHSL(colorHue, 0.6, 0.7);  
                             }
                             
                             tile.visible = false; 
@@ -94428,7 +94428,11 @@ void main() {
                 cube.name = 'highMapCube';
                 this.highMapCube = cube;
                 viewer.scene.scene.add(cube);
-                //cube.scale.set(0.01,0.01,0.01)
+                
+                {
+                    let s = 0.1;
+                    cube.scale.set(s,s,s);
+                }//注:由于原本的mesh上加了深度贴图,可能距离镜头比这里的近。凡是在cube以内的部分都会挡住cube导致模糊。但是应该不常见吧。
                 
                 this.highMapCube.visible = false; 
                 viewer.setObjectLayers(this.highMapCube, 'sceneObjects'/* 'skybox' */); //如果是skybox层,点云可见时会被遮住,depthTest为false呢? 但不会遮住场景物体
@@ -94505,6 +94509,7 @@ void main() {
             if(!this.highMapCube)   return 
             //console.warn('showHighMap')
             this.highMapCube.visible = true; 
+             
         } 
         hideHighMap(){ 
             if(!this.highMapCube)   return
@@ -94527,10 +94532,7 @@ void main() {
                 //} 
                 let pano = new Panorama( info, this   );
                 
-                /* pano.mesh.layers.set(Potree.config.renderLayers.marker)
-                pano.marker.layers.set(Potree.config.renderLayers.marker)  */
-                
-                
+              
                 pano.addEventListener('dispose',(e)=>{
                     if(this.closestPano == pano) this.closestPano = null;
                 });
@@ -94556,29 +94558,12 @@ void main() {
             
             this.tileDownloader.setPanoData(this.panos, [] /* , Potree.settings.number */);
 
-            {
-                /* var panosBound = new THREE.Box3
-                this.panos.forEach(pano=>{
-                    panosBound.expandByPoint(pano.position)
-                }) 
-                let center = panosBound.getCenter(new THREE.Vector3)
-                let minBound = (new THREE.Box3()).setFromCenterAndSize(center, new THREE.Vector3(1,1,1))
-                panosBound.union(minBound)
-               
-                this.bound = {
-                    bounding:panosBound,
-                    size: panosBound.getSize(new THREE.Vector3),
-                    center,
-                } */
-                
+            { 
                 let minSize = new Vector3(1,1,1);
                 this.bound = math.getBoundByPoints(this.panos.map(e=>e.position), minSize);
-                
-                
+                 
                 viewer.scene.pointclouds.forEach(pointcloud=>pointcloud.getPanosBound()); 
-                
                  
-                
             }
             
             
@@ -94656,7 +94641,7 @@ void main() {
                 throw msg;
             }
         }
-    }();
+    }();//加载全景图的流程:请求下载当前点的最低分辨率图(不过有可能已经下载了),并且请求uploadTile渲染当前漫游点,若tile都upload完(先6个)会发送消息,LoadComplete 从而回调成功。
 
 
 

Datei-Diff unterdrückt, da er zu groß ist
+ 1 - 1
public/static/lib/potree/potree.js.map


+ 11 - 5
src/utils/ConvertViews.js

@@ -451,9 +451,15 @@ export default class ConvertViews extends THREE.EventDispatcher{
         })
         let panoPos2 = targetFakeApp.panos.map(e=>{
             return e.position
-        })    
-             
+        }) 
+        
         length = panoPos1.length
+        
+        if(panoPos1.length!=panoPos2.length){
+            console.error('两个场景漫游点数量不同!',panoPos1,panoPos2)
+             
+        }
+        
 
         //挑选连续的两个点为向量来计算,如有123个漫游点,则选取12 23 31作为向量
 
@@ -885,9 +891,9 @@ export default class ConvertViews extends THREE.EventDispatcher{
         this.lockCamera(true)
         
         
-        /* this.targetApp.addEventListener(this.targetApp.Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked,(e)=>{
-            console.log('MouseClicked',e)
-        }); */
+        /* this.targetApp.viewer.addEventListener(this.targetApp.Glodon.Bimface.Viewer.Viewer3DEvent.MouseClicked,(e)=>{
+            console.log('MouseClicked',e)//
+        });  */ 
         let dom1 = this.bimViewer.getDomElement() 
         
         let getEvent = (type, e)=>{