Browse Source

Merge branch 'dev' of http://192.168.0.115:3000/bill/traffic-laser into dev

bill 1 year ago
parent
commit
9abe32a845
2 changed files with 91 additions and 39 deletions
  1. 90 38
      public/static/lib/potree/potree.js
  2. 1 1
      public/static/lib/potree/potree.js.map

+ 90 - 38
public/static/lib/potree/potree.js

@@ -74433,7 +74433,7 @@ void main()
 	            unloadedGeometry[i].node.load(unloadedGeometry[i].pointcloud.pcoGeometry); 
 	        }  */ 
 	        
-	        let maxNodesLoading = Common$1.getBestCount('unloadedGeometry', viewer.lastFrameChanged?1:3, 10,  4, 15 /*  , true  */ );//dur在iphoneX中静止有7,pc是2  //!lastFrameChanged静止时加速下载
+	        let maxNodesLoading = Common$1.getBestCount('unloadedGeometry', viewer.lastFrameChanged?2:4, 10,  4, 15 /*  , true  */ );//dur在iphoneX中静止有7,pc是2  //!lastFrameChanged静止时加速下载
 	        //THREE.Math.clamp(Math.round(9 - dur), 1, 6 ) 
 	        //console.log('unloadedGeometry',unloadedGeometry.length, 'maxNodesLoading',maxNodesLoading)
 	        //主要在手机端有效果。不改之前在展示的点云较多时前进会卡。
@@ -82252,13 +82252,53 @@ void main()
 	            }else {
 	                let eyePos = viewer.mainViewport.camera.position;
 	                let dir = viewer.mainViewport.view.direction; //new THREE.Vector3().subVectors(center,eyePos).normalize()
+	                 
+	                let centerDir = new Vector3().subVectors(center,eyePos).normalize();
+	                let p1Dir = new Vector3().subVectors(p1,eyePos).normalize();
+	                let p2Dir = new Vector3().subVectors(p2,eyePos).normalize();
+	                
+	                /* let cos1 =  p1Dir.dot(centerDir)
+	                let cos2 =  p2Dir.dot(centerDir)
+	                let diff = Math.abs(cos1/cos2)
+	                diff = math.linearClamp(diff,0,2,  ) */
+	                
+	                let dis1 = p1.distanceToSquared(eyePos);
+	                let dis2 = p2.distanceToSquared(eyePos);
+	                let diff = Math.abs(dis1/dis2);
+	                diff<1 && (diff = 1/diff);
+	                diff = math.linearClamp(diff,0, 10,    0,1 );
+	                
+	                
+	                
+	                
+	                /* if(centerDir.dot(dir)<0){//中点在相机后方,就不设置
+	                    label.setPos(center)
+	                    return
+	                } */
+	                let cos = dir.dot(this.lineDir); 
+	                let nearPoint = cos > 0 ? p2 : p1; //近端点。  
+	                let nearPointDir = new Vector3().subVectors(nearPoint,eyePos);
+	                //使label在中点和近端点中变化, 近端点可能到了相机后方,需要投影到相机所在平面上
+	                if(nearPointDir.dot(dir)<0){//近端点到了相机后方,前移。 
+	                    let ray = new Raycaster();
+	                    ray.set(nearPoint, cos>0?this.lineDir:this.lineDir.clone().negate());
+	                    let camDirPlane = new Plane().setFromNormalAndCoplanarPoint(dir,  eyePos); 
+	                    nearPoint = ray.ray.intersectPlane(camDirPlane, new Vector3()); 
+	                } 
+	                
 	                //let vec = label.sprite.lineDir
-	                let cos = dir.dot(this.lineDir);  
+	                  
+	                let efficiency = 0.3; // 0-1  数值越高,r越容易接近1或-1,label越容易在倾斜后靠近近端点。 
+	                //let r = 0.5*efficiency*cos + 0.5  
+	                let r = 0.5*efficiency*diff*cos + 0.5;
+	                r = MathUtils$1.clamp(r,0.1,0.9);
+	                
+	                if(cos > 0){
+	                    center = p1.clone().multiplyScalar(1-r).add(nearPoint.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
+	                }else {
+	                    center = nearPoint.clone().multiplyScalar(1-r).add(p2.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
+	                }
 	                
-	                let efficiency = 0.35; // 0-1  数值越高,r越容易接近1或-1,label越容易在倾斜后靠近近端点。 
-	                let r = 0.5*efficiency*cos + 0.5;
-	                 
-	                center = p1.clone().multiplyScalar(1-r).add(p2.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
 	                label.setPos(center);
 	            }
 	             
@@ -84003,15 +84043,15 @@ void main()
 		
 	    
 		render(o={}){
-	        if(this.scene.children.length == 0)return
+	        if(this.scene.children.filter(e=>e.visible).length == 0)return
 	        
 	        Potree.Utils.setCameraLayers(o.camera, ['measure']);
 			
-	        if(o.screenshot && this.viewer.fxaaPass.enabled){ //抗锯齿 
+	        /* if(o.screenshot && this.viewer.fxaaPass.enabled){ //抗锯齿 
 	            this.viewer.composer.render(this.scene, o.camera );   
-	        }else { 
+	        }else{  */
 	            this.viewer.renderer.render(this.scene, o.camera );
-	        }
+	        //}
 		}
 	};
 
@@ -98460,7 +98500,7 @@ ENDSEC
 	    let minTanBeta = minDis / height;    /* (pano0.position.z - pano0.floorPosition.z) */
 	    let minBeta = Math.atan(minTanBeta);
 	    const maxSinAlpha = Math.cos(minBeta); // 注:beta = Math/2 - alpha
-	    const skyHeight = 50;
+	    const skyHeight = 100;
 	    return function(pano0, pano1){
 	    
 	        if(Potree.settings.displayMode != 'showPanos' || pano0 == pano1
@@ -98562,7 +98602,7 @@ ENDSEC
 	                dirs_ = dirs_.map(deg=> dir.clone().setZ(getZ(deg)).normalize() );
 	              
 	                
-	                let max = 50;
+	                let max = skyHeight;
 	                let count2 = dirs_.length;
 	                let disArr = dirs_.map((dir_, i) =>{   
 	                    let intersect = this.getIntersect(pano, dir_, origin); 
@@ -131889,9 +131929,9 @@ ENDSEC
 
 		this.copyPass = new ShaderPass( CopyShader );
 	    
-	    viewer.addEventListener('resize',(e)=>{ 
-	        this.setSize(e.viewport.resolution2.x,e.viewport.resolution2.y); //暂时假设composer渲染的viewer的viewports.length == 1
-	    });
+	    /* viewer.addEventListener('resize',(e)=>{ 
+	        this.setSize(e.viewport.resolution2.x,e.viewport.resolution2.y) //暂时假设composer渲染的viewer的viewports.length == 1
+	    }) */
 	    
 	};
 
@@ -131936,6 +131976,10 @@ ENDSEC
 	            
 	        }  
 	        
+	        if(oldTarget){
+	            this.setSize(oldTarget.width,oldTarget.height); 
+	        }
+	        
 			for ( i = 0; i < il; i ++ ) {
 
 				pass = passes[ i ];
@@ -132015,7 +132059,7 @@ ENDSEC
 	 
 	        scaleRatio = scaleRatio || this.scaleRatio || 1;
 	        //console.log('setSize', width * scaleRatio, height * scaleRatio)
-	        let maxTexWidth = 8192;
+	        let maxTexWidth = 4096;//否则黑的
 	        let w = width * scaleRatio;
 	        let h = height * scaleRatio;
 	        if(w > maxTexWidth || h > maxTexWidth){ //超出会崩溃
@@ -132028,7 +132072,7 @@ ENDSEC
 	        w = width * scaleRatio;
 	        h = height * scaleRatio;
 	        
-	        
+	        console.log('setSize', w,h, width,height,this.scaleRatio);
 			this.renderTarget1.setSize( w, h );
 			this.renderTarget2.setSize( w, h );
 
@@ -132395,7 +132439,7 @@ ENDSEC
 	}
 
 	void main() {
-			const float edgeDetectionQuality = 0.1 ;//.05 ;  //越高,越保留细节;越低,越平滑 但模糊 
+			const float edgeDetectionQuality = 0.9 ;//.05 ;  //越高,越保留细节;越低,越平滑 但模糊 
 			const float invEdgeDetectionQuality = 1. / edgeDetectionQuality;
 
 			gl_FragColor = FxaaPixelShader(
@@ -133606,7 +133650,7 @@ ENDSEC
 	                let speed;
 	                let pano = viewer.images360.findNearestPano();
 	                if(!pano){
-	                    if(!viewer.bound)return
+	                    if(!viewer.bound || viewer.bound.boundSize.x == 0)return
 	                    let boundFloor = viewer.bound.boundingBox.clone();
 	                    boundFloor.max.z = boundFloor.min.z;
 	                    speed = boundFloor.distanceToPoint(viewer.mainViewport.view.position);
@@ -137244,7 +137288,7 @@ ENDSEC
 	        var sid = Date.now();
 	        //抗锯齿待加 1 post处理 2截图大张再抗锯齿缩小
 	    
-	        console.log('startScreenshot: '+sid);
+	        console.warn('startScreenshot: '+sid,width,height);
 	        
 	        let updateCamera = ()=>{ 
 	            this.viewports.forEach(e=>{
@@ -137265,9 +137309,16 @@ ENDSEC
 	            
 	            this.needRender = true;
 	            
-	            let { dataUrl  } = viewerMaster.makeScreenshot( new Vector2(width,height), null, compressRatio    );
-	           
-	            
+	            if(info.useRenderTarget){
+	                //离屏渲染 有抗锯齿问题、在手机上速度慢
+	                var { dataUrl  } = viewerMaster.makeScreenshot( new Vector2(width,height), null, compressRatio    );
+	                
+	            }else {
+	                //直接渲染 会改变canvas大小
+	                let canvas = this.renderArea.getElementsByTagName('canvas')[0]; 
+	                this.render({  screenshot : true,   width , height,   resize :true  }); //需要resize
+	                var dataUrl = canvas.toDataURL('image/jpeg',compressRatio); 
+	            }
 	            
 	            if(!Potree.settings.isOfficial){
 	                Common$1.downloadFile(dataUrl, 'screenshot.jpg'); 
@@ -137279,8 +137330,8 @@ ENDSEC
 	                
 	                oldStates.viewports.forEach(old=>{//恢复相机
 	                    var viewport = viewports.find(v=>v.name == old.name);
-	                    viewport.left = old.left;
-	                    viewport.width = old.width;
+	                    viewport.left = old.left; viewport.bottom = old.bottom;
+	                    viewport.width = old.width; viewport.height = old.height;
 	                    viewport.view.copy(old.view); 
 	                    viewport.view.applyToCamera(viewport.camera);  
 	                     
@@ -137304,7 +137355,7 @@ ENDSEC
 	                    if(!this.screenshoting){
 	                        //Potree.settings.pointNoLimit = false  
 	                        Potree.settings.pointDensity = 'high';
-	                        console.log('恢复pointDensity');
+	                        console.warn('恢复pointDensity');
 	                        if(viewer.scene.pointclouds[0].material.oldSize_ ){
 	                            viewer.scene.pointclouds[0].material.size = viewer.scene.pointclouds[0].material.oldSize_; 
 	                            viewer.scene.pointclouds[0].material.oldSize_ = null;   
@@ -137313,7 +137364,7 @@ ENDSEC
 	                },500); //延迟:避免连续多次截图时释放点云
 	                this.screenshoting = false;
 	                
-	                console.log('screenshot done: '+sid);
+	                console.warn('screenshot done: '+sid);
 	            };
 	            
 	            {//恢复:
@@ -137453,34 +137504,35 @@ ENDSEC
 	                let pano = this.images360.findNearestPano();
 	                let dis = pano.position.distanceTo(this.mainViewport.camera.position);
 	                if(dis > 3) floorplanView = true; //离远一点的平视希望也是全部加载好。勉强只能这么写
-	                console.log('floorplanView',floorplanView);
+	                console.warn('floorplanView',floorplanView);
 	            }    
 	                 
-	            let maxTime = floorplanView ? 10000 : 2000;    //注意交通一般要截图两次,先截带测量线的 
+	            let maxTime = floorplanView ? 3000 : 1500;    //注意交通一般要截图两次,先截带测量线的 
 	            setTimeout(()=>{
 	                if(Potree.pointsLoading && Potree.settings.displayMode == 'showPointCloud'){//如果还在加载 
 	                    viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确) 
-	                        if(!finish)console.log('加载完毕', ' numVisiblePoints', Potree.numVisiblePoints);                         
+	                        if(!finish)console.warn('加载完毕', ' numVisiblePoints', Potree.numVisiblePoints);                         
 	                        dealDone();
 	                    },{once:true});
 	                    let lastNumVisiblePoints;  
 	                    if(floorplanView){ //perspective的不需要,远处加载不完也没大碍
 	                        setTimeout(()=>{//超时不候 
 	                            if(!finish /* && Potree.numVisiblePoints > Potree.pointBudget * 0.7  */){
-	                                console.log('加载时间达最长限制的40%,降level, numVisiblePoints', Potree.numVisiblePoints);  
+	                                console.warn('加载时间达最长限制的50%,降level, numVisiblePoints', Potree.numVisiblePoints);  
 	                                lastNumVisiblePoints = Potree.numVisiblePoints;      
 	                                decreaseLevel(); //加载时间过长 
 	                            } 
-	                        },maxTime*0.4);
+	                        },maxTime*0.5);
 	                        setTimeout(()=>{// 第一次降有可能没效果,因为大部分level不是最高的
-	                            if(!finish && (Potree.numVisiblePoints - lastNumVisiblePoints) > -10000  ){ //没怎么降
-	                                console.log('加载时间达最长限制的50%,降level, numVisiblePoints', Potree.numVisiblePoints);        
+	                            console.warn('加载时间达最长限制的60%,numVisiblePoints', Potree.numVisiblePoints);        
+	                            if(!finish && (Potree.numVisiblePoints - lastNumVisiblePoints) > -20000  ){ //没怎么降
+	                                console.warn('加载时间达最长限制的60%,降level, numVisiblePoints', Potree.numVisiblePoints);        
 	                                decreaseLevel(); //加载时间过长
 	                            } 
-	                        },maxTime*0.5);
+	                        },maxTime*0.6);
 	                    }
 	                    setTimeout(()=>{//超时不候 
-	                        if(!finish)console.log('超时, numVisiblePoints', Potree.numVisiblePoints);  
+	                        if(!finish)console.warn('超时, numVisiblePoints', Potree.numVisiblePoints);  
 	                        dealDone();
 	                    },maxTime);
 	                }else {
@@ -137493,7 +137545,7 @@ ENDSEC
 	                let levels = viewer.scene.pointclouds[0].visibleNodes.map(e=>e.getLevel()); 
 	                //console.log(levels)
 	                let actMaxLevel = Math.max.apply(null, levels); //实际加载到的最高的node level
-	                console.log('decreaseLevel, 新maxLevel', actMaxLevel - 1, '原maxlevel', viewer.scene.pointclouds[0].maxLevel, 'numVisiblePoints', Potree.numVisiblePoints); 
+	                console.warn('decreaseLevel, 新maxLevel', actMaxLevel - 1, '原maxlevel', viewer.scene.pointclouds[0].maxLevel, 'numVisiblePoints', Potree.numVisiblePoints); 
 	                viewer.scene.pointclouds[0].maxLevel = actMaxLevel - 1;
 	                viewer.scene.pointclouds[0].material.oldSize_ = viewer.scene.pointclouds[0].material.size;
 	                viewer.scene.pointclouds[0].material.size *= 1.5;
@@ -139611,7 +139663,7 @@ ENDSEC
 	let pointBudget = 1 * 1000 * 1000;
 	let framenumber = 0;
 	let numNodesLoading = 0;
-	let maxNodesLoading = 6; 
+	let maxNodesLoading = 10; 
 
 	const debug = {};
 

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