xzw 1 年之前
父節點
當前提交
fee7941465

+ 1 - 1
gulpfile.js

@@ -97,7 +97,7 @@ gulp.task('webserver', gulp.series(async function() {
 	server = connect.server({
 		port: 1234,
         host:'192.168.0.113',
-		https: true,
+		https: false,
         middleware: function(connect, opt) {
           return [
             // 首先,使用addResponseHeaders中间件来设置响应头

File diff suppressed because it is too large
+ 11591 - 0
libs/gaussian/gaussian-splats-3d.module.js


File diff suppressed because it is too large
+ 1 - 0
libs/gaussian/gaussian-splats-3d.module.js.map


File diff suppressed because it is too large
+ 2 - 0
libs/gaussian/gaussian-splats-3d.module.min.js


File diff suppressed because it is too large
+ 1 - 0
libs/gaussian/gaussian-splats-3d.module.min.js.map


+ 1 - 1
libs/three.js/3dtiles/three-loader-3dtiles.esm.js

@@ -36,7 +36,7 @@ let visiGeoCount = 0
 const maxVertexVisi = 5e6
 const maxTexVisi = 500
 
-const maxDepth = 100
+let maxDepth = 100
 
 function getGpuMemoryUsage(win = window){//总的
     let c = 0

+ 4 - 2
libs/three.js/loaders/GLTFLoader.js

@@ -3609,8 +3609,10 @@ class GLTFParser {
 			}
 
 			materialType = this._invokeOne( function ( ext ) {
-                return BasicMaterial//kmuExtension.getMaterialType(); //xzw 改
-				//return ext.getMaterialType && ext.getMaterialType( materialIndex );
+                //return BasicMaterial //2024.7放弃使用这个,因为纯色的看上去连成一片
+                
+                //kmuExtension.getMaterialType(); //xzw 改
+				return ext.getMaterialType && ext.getMaterialType( materialIndex );
 
 			} );
 

File diff suppressed because it is too large
+ 1617 - 0
libs/three.js/loaders/dxf/dxf-parser.js


File diff suppressed because it is too large
+ 1 - 0
libs/three.js/loaders/dxf/dxf-parser.min.js


File diff suppressed because it is too large
+ 2657 - 0
libs/three.js/loaders/ifc/cdn.jsdelivr.net_npm_web-ifc-three@0.0.126_IFCLoader.js


File diff suppressed because it is too large
+ 55951 - 0
libs/three.js/loaders/ifc/cdn.jsdelivr.net_npm_web-ifc@0.0.36_web-ifc-api.js


二進制
libs/three.js/loaders/ifc/web-ifc.wasm


+ 18 - 0
src/Potree.js

@@ -1,6 +1,24 @@
     
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
 //export * from "./Potree_update_visibility.js";  //因加载顺序问题,该文件直接在shim中重写
+ 
 export * from "./custom/start.js";
+  
 export {settings, config} from './custom/settings.js'  
 export * from './custom/viewer/map/MapViewer.js'  
    

+ 11 - 14
src/custom/materials/ModelTextureMaterial.js

@@ -93,8 +93,7 @@ let shader = {
             uniform mat4 pano0Matrix;
             
             uniform vec3 pano1Position;
-            uniform mat4 pano1Matrix;
-            //uniform mat4 pano1Matrix2;
+            uniform mat4 pano1Matrix; 
 
            
             varying vec2 vUv; 
@@ -151,7 +150,7 @@ let shader = {
             uniform float modelAlpha;
             uniform float opacity;
             uniform float progress;
-            uniform int blackout;
+            uniform int tranType;
             uniform vec3 pano0Position;
             uniform vec3 pano1Position;
             uniform float maxDistance;
@@ -159,17 +158,14 @@ let shader = {
             uniform float minOpa;
             
           
-       
-            /* uniform sampler2D pano0Map;
-            uniform sampler2D pano1Map;    */   
+          
             uniform samplerCube pano0Map;
             uniform samplerCube pano1Map;
           
             
             varying vec2 vUv; 
             varying vec3 vWorldPosition0;
-            varying vec3 vWorldPosition1;
-            //varying vec3 vWorldPosition12;
+            varying vec3 vWorldPosition1; 
             
           
             /* vec2 getSamplerCoord( vec3 direction ) 
@@ -212,7 +208,7 @@ let shader = {
                     //distance *= 255. * .001;           // distance is now in meters
                     
                     //更改
-                    float distance = (depth.g + depth.r / 256.) * 255.;  //为什么要乘以255 
+                    float distance = (depth.g + depth.r / 256.) * 255.;  
                     
                     if(distance == 0.0){//漫游点底部识别不到的区域,给一个地板高度 
                          if(uv2.y < depthTexUVyLimit) distance = heightUp / dir.y;    
@@ -224,7 +220,6 @@ let shader = {
                     
                     depthValue.x = distance;
                     
-                   // return  r[1] + r[0] / 256  
                     distance += .1;          // add a safety margin
 
                     vec4 eyePos2 = vec4(normalize(eyePos.xyz) * distance, 1.);
@@ -243,16 +238,18 @@ let shader = {
             {
                 vec3 vWorldPosition0N = normalize(vWorldPosition0);
                 vec3 vWorldPosition1N = normalize(vWorldPosition1);
-               
+                float progress_ = progress;
                 
                 vec4 colorFromPano0 = vec4(0.0,0.0,0.0,0.0);
                 #if defined(usePanoMap0)
                     //即progress < 1.0   通常是1
                     colorFromPano0=textureCube(pano0Map,vWorldPosition0N.xyz);
+                #else 
+                    progress_ = 1.0;
                 #endif
                 vec4 colorFromPano1=textureCube(pano1Map,vWorldPosition1N.xyz);
  
-                gl_FragColor = mix(colorFromPano0,colorFromPano1,progress);
+                gl_FragColor = mix(colorFromPano0,colorFromPano1,progress_);
               
               
                 
@@ -275,7 +272,7 @@ let shader = {
                     vec2 depth1 = getDepth(vWorldPosition1N, depthMap1, cameraHeight1, ceilHeight1, eyePos);
                     
                     
-                    gl_FragDepthEXT = mix(depth0.y,depth1.y,progress); 
+                    gl_FragDepthEXT = mix(depth0.y,depth1.y,progress_); 
                     gl_FragDepthEXT = clamp(gl_FragDepthEXT, 0.0, 1.0);    //防止部分手机出现黑块。ios 16  。 因为我给的超远值超出范围
                     
 
@@ -344,7 +341,7 @@ export default class ModelTextureMaterial extends THREE.RawShaderMaterial {
                 return progress
             },
             set: e => {
-                if (e < 1) {
+                if (e < 1 && !Potree.settings.fastTran ) {
                     if (!('usePanoMap0' in this.defines)) {
                         this.defines.usePanoMap0 = ''
                         this.needsUpdate = true

+ 21 - 6
src/custom/mergeStartTest.js

@@ -321,7 +321,9 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
              
          
     let tilesetUrls = [   
-            
+        'https://4dkk.4dage.com/fusion/test/b3dm/modelId_1093/tileset.json',
+    
+        'http://192.168.0.135:14000/oss/fusion/test/b3dm/modelId_1175/tileset.json',
         'http://4dkk.4dage.com/fusion/test/b3dm/modelId_1075/tileset.json', //depth 11 较高  ,为了防止卡顿需要提高maximumScreenSpaceError
         'https://testgis.4dage.com/LVBADUI_qp/tileset.json', //村庄   含rtcCenter  
         
@@ -554,7 +556,9 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
                 
                  
                 let angle = 0
-                let fileName = '26k.glb' //176M  
+                let fileName = 'archmodels95_043.glb'//纯色
+                
+                //'26k.glb' //176M  
                   
                
                 
@@ -585,9 +589,20 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
                 },callback,onprogress)
                 
                   
-                
+            }else if(name == 'ply'){ 
+                  
+                let file = 'floor_0_all'
+                 
+                viewer.loadModel({ 
+                    fileType:'ply',
+                    url: `${Potree.resourcePath}/models/ply/${file}.ply` ,
+                     
+                    transform : { 
+                        rotation : [0,  0,   0],
+                        position : [0,0,0]  
+                    }  
+                },callback,onprogress)
                  
-                
                 
             }else if(name == 'dxf'){
                  let fileName1 = 'tunnel.dxf', fileName2 = 'tunnel-line.dxf' 
@@ -744,14 +759,14 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
         
     },2000)  */  
     
-     setTimeout(()=>{
+     /* setTimeout(()=>{
          Potree.addModel('3dTiles')
          viewer.addEventListener('modelLoaded',(e)=>{
              
                 confirmPos()
              
         }) 
-     },2000)
+     },2000) */
 }
  
  

+ 1 - 1
src/custom/modules/mergeModel/MergeEditor.js

@@ -805,7 +805,7 @@ let MergeEditor = {
                     
                 }))
                 viewer.scene.scene.add(this.groundPlane)
-                this.groundPlane.position.z = -1
+                this.groundPlane.position.z = 0.1
             }else{
                 this.groundPlane.material.map = map
             }

+ 1 - 1
src/custom/modules/panos/DepthImageSampler.js

@@ -100,7 +100,7 @@ class DepthImageSampler extends THREE.EventDispatcher{
             if (!(x < 0 || y < 0 || x >= this.canvas.width || y >= this.canvas.height)){  
                 let blockIndex = this.canvas.width * y + x
                 let color = imgData.data.slice(blockIndex*4, (blockIndex+1)*4)
-                return color[1] + color[0] / 256
+                return color[1] + color[0] / 256            //为什么不是除以255见聊天记录.(验证过比点云的远一点点)
             }
         }
          

+ 27 - 13
src/custom/modules/panos/Images360.js

@@ -2,6 +2,7 @@
 import * as THREE from "../../../../libs/three.js/build/three.module.js"; 
 import {TextSprite} from "../../objects/TextSprite.js";
 import ModelTextureMaterial from "../../materials/ModelTextureMaterial.js";
+import FastTranPass from '../../materials/FastTranPass.js'  
 import Common from "../../utils/Common.js";
 import math from "../../utils/math.js";
 import cameraLight from "../../utils/cameraLight.js";
@@ -15,7 +16,8 @@ import TilePrioritizer from './tile/TilePrioritizer.js'
 import {transitions, easing, lerp} from "../../utils/transitions.js";
 import DepthImageSampler from './DepthImageSampler.js' 
 let {PanoSizeClass,Vectors,GLCubeFaces, PanoramaEvents} = Potree.defines
- 
+
+    
 
  
 var rot90 = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0,0,1),  Math.PI/2 ); //使用的是刚好适合全景图的,给cube贴图需要转90°
@@ -64,7 +66,7 @@ export class Images360 extends THREE.EventDispatcher{
         this.node.name = 'ImagesNode'
          
         this.cubePanos = [];
-        
+        this.fastTranMaskPass = new FastTranPass(viewer.renderer)
         
         {
             this.cube = new THREE.Mesh(new THREE.BoxBufferGeometry(1,1,1,1),new ModelTextureMaterial());
@@ -690,7 +692,7 @@ export class Images360 extends THREE.EventDispatcher{
             }
            
             this.dispatchEvent({type:'flyToPanoDone', makeIt, disturb})
-             
+            this.fastTranMaskPass.stop() 
             toPano.deferred && toPano.deferred.resolve(makeIt)  //测量线截图时发现,resolve需要写在flying=false 后才行。
         }
         
@@ -773,16 +775,6 @@ export class Images360 extends THREE.EventDispatcher{
         }  
                    
         
-        if(config.transition.showSkybox || config.transition.pointUsePanoTex){
-             this.setProjectedPanos({
-                progress:0,
-                ifSkybox: this.cube.visible,
-                ifPointcloud : config.transition.pointUsePanoTex,
-                easeInOutRatio : pointcloudVisi ? 0.3 : 0,
-                pano0:this.currentPano,
-                pano1:pano
-            })  
-        }
         
         const endPosition = pano.position.clone() 
         let T = Potree.config.transitionsTime
@@ -795,7 +787,26 @@ export class Images360 extends THREE.EventDispatcher{
         
         let maxDis = 7
         let duration = toPano.duration == void 0 ? Math.min(dis, maxDis) * T.flytimeDistanceMultiplier + T.flyMinTime : toPano.duration 
+        
+        
          
+        if(config.transition.showSkybox || config.transition.pointUsePanoTex){
+            
+             if(Potree.settings.fastTran ){
+                this.fastTranMaskPass.start() //截图当前画面
+                viewer.scene.view.position.copy(endPosition)
+             }
+            
+            
+             this.setProjectedPanos({
+                progress: 0,
+                ifSkybox: this.cube.visible,
+                ifPointcloud : config.transition.pointUsePanoTex,
+                easeInOutRatio : pointcloudVisi ? 0.3 : 0,
+                pano0:this.currentPano,
+                pano1:pano
+            })  
+        }
         
         
         if(toPano.useBound){
@@ -873,6 +884,9 @@ export class Images360 extends THREE.EventDispatcher{
             this.dispatchEvent({type:'flyToPano', toPano})
             
              
+            
+             
+             
             viewer.scene.view.setView({position:endPosition, target, quaternion:toPano.quaternion , duration:toPano.duration,  
                 onUpdate:(progress_, delta)=>{
                     

+ 3 - 2
src/custom/potree.shim.js

@@ -164,7 +164,7 @@ var texLoader = new THREE.TextureLoader()
 
 
 
-Utils.loadSkybox = function(path, oldSky ) {
+Utils.loadSkybox = function(path, oldSky, callback ) {
     let  camera, scene, parent , cameraOrtho
     if(!oldSky){
         parent = new THREE.Object3D("skybox_root");
@@ -217,7 +217,8 @@ Utils.loadSkybox = function(path, oldSky ) {
         texture.flipY = false 
         texture.magFilter = THREE.LinearFilter
         texture.minFilter = THREE.LinearFilter
-        scene.children[0].material.uniforms.tDiffuse.value = texture  
+        scene.children[0].material.uniforms.tDiffuse.value = texture 
+        callback && callback()
         viewer.dispatchEvent('content_changed')
     },null,(e)=>{//error
         console.error('loadSkybox失败',path) 

+ 4 - 1
src/custom/settings.js

@@ -473,7 +473,10 @@ let settings = {//设置   可修改
     pickFrontPointRatio:config.pickFrontPointRatio, //默认pick点云时选中靠近镜头的点的偏向
     dragPolyBeyondPoint: browser.urlHasValue('dragPolyBeyondPoint'),  //ctrlPolygon是否可以拖拽到没点云的地方
     panoZoomByPointer: false,//全景图是否定点缩放
-    areaAtNotPlane: false
+    areaAtNotPlane: false,
+    
+    
+    fastTran: isTest
 }
 
 

+ 38 - 2
src/custom/start.js

@@ -1159,11 +1159,11 @@ export function mergeEditStart(dom, mapDom){
                 loadDone(object)
             }
             
-             
+              
             let info = { 
                 fileType: prop.type, 
                 id: prop.id,
-                unlit:true,
+                //unlit:true,
                 url : prop.url,
                 name : prop.title,
                 /* transform : { 
@@ -1210,7 +1210,43 @@ export function mergeEditStart(dom, mapDom){
                 
             },callback,onprogress)
         
+        }else if(prop.type == 'shp'){ 
+            viewer.loadModel({  
+                fileType: 'shp', 
+                id: prop.id,
+                name : prop.title, 
+                url:prop.url,
+                
+            },callback,onprogress)
+  
+          
+            //shpModel.position.set(-330000, 900000,10)//尽量移动到原点。原位置在江门那
+            
+             
+         
+           
+            
+ 
+        
+        }else if(prop.type == '3dgs'){ 
+        
+            let callback = (object)=>{ 
+                object.isModel = true 
+                
+                loadDone(object)
+            } 
+            viewer.loadModel({  
+                fileType: '3dgs', 
+                id: prop.id,
+                name : prop.title, 
+                url:prop.url,
+                
+            },callback,onprogress)
+        
             
+             
+            
+             
         }else{  
             
              //else if(prop.type == 'las' || prop.type == 'ply' || prop.type == 'laz' ) 

+ 0 - 6
src/custom/three.shim.js

@@ -379,9 +379,3 @@ THREE.Object3D.prototype.realVisible = function(){
 
 
 
-
-
-
-
-
-

+ 86 - 15
src/custom/viewer/ViewerNew.js

@@ -1,4 +1,9 @@
 
+
+ 
+//---------------------------------
+
+
 import * as THREE from "../../../libs/three.js/build/three.module.js";
 import {ClipTask, ClipMethod, CameraMode, LengthUnits, ElevationGradientRepeat} from "../../defines.js";
 import {TagTool} from "../objects/tool/TagTool.js"; 
@@ -73,6 +78,8 @@ import RenderPass from '../materials/postprocessing/RenderPass.js'
 import FXAAShader from "../materials/postprocessing/FXAAShader.js"
 import OutlinePass from "../materials/postprocessing/OutlinePass.js"
 import BasicMaterial from '../materials/BasicMaterial.js'  
+    
+        
         
 //import {RoomEnvironment} from './RoomEnvironment.js'
 import {FirstPersonControls} from "../../navigation/FirstPersonControlsNew.js";
@@ -446,10 +453,12 @@ export class Viewer extends ViewerBase{
                 this.fxaaPass.renderToScreen = true;
                 
 				this.composer.addPass( this.fxaaPass );  */
-                //抗锯齿截图 效果时而好时而不好,文字比较模糊
+                //抗锯齿截图 效果时而好时而不好,文字比较模糊 
+                //这两个暂时不能一起用。目前刚好不需要一起用
                 
+                /* this.images360.fastTranMaskPass = new FastTranPass( this.renderer )
+                this.composer.addPass(this.images360.fastTranMaskPass)//add */
                 
-                //这两个暂时不能一起用。目前刚好不需要一起用
                 
             }
             
@@ -585,7 +594,8 @@ export class Viewer extends ViewerBase{
                 mtlLoader : new MTLLoader( manager ),
                 glbLoader : new GLTFLoader(undefined, this.renderer, Potree.settings.libsUrl ),
                 plyLoader : new PLYLoader( manager ),
-                dxfLoader : new DxfLoader() 
+                dxfLoader : new DxfLoader(),
+                shapeLoader: new Potree.ShapefileLoader()
             } 
             //add test
             /* const environment = new RoomEnvironment();
@@ -1628,10 +1638,11 @@ export class Viewer extends ViewerBase{
 
 		if(bg === "skybox"){
             if(!src)src = Potree.resourcePath+'/textures/skybox/xingkong.jpg'
-			this.skybox = Utils.loadSkybox(src, this.skybox);
-		} 
-
-		this.background = bg;
+			this.skybox = Utils.loadSkybox(src, this.skybox, ()=>{
+                this.background = bg;
+            });
+		}else{  this.background = bg;
+        }
         this.backgroundOpacity = 1//add
 		this.dispatchEvent({'type': 'background_changed', 'viewer': this});
 	}
@@ -3312,7 +3323,7 @@ export class Viewer extends ViewerBase{
                 
             } 
                  
-             if(Potree.settings.notAdditiveBlending){ // 融合页面才用到
+            if(Potree.settings.notAdditiveBlending){ // 融合页面才用到
                 params.renderBeforeCloud = false
                 this.renderOverlay1(params) 
                 this.renderOverlay2(params)  
@@ -3568,7 +3579,9 @@ export class Viewer extends ViewerBase{
             viewports = viewports.filter(v=>v.active) 
             if(viewports.length > 0){   
                 params.viewports = viewports  
-                if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot){  
+                if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot 
+                   // || this.images360.fastTranMaskPass.enabled
+                ){  
                     let scenes = this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud) 
                     this.composer.render(scenes, null, this.viewports, this.renderDefault.bind(this));  
                 }else{  
@@ -5277,11 +5290,10 @@ export class Viewer extends ViewerBase{
                     //console.log(child.name, 'roughness',child.material.roughness,'metalness',child.material.metalness)
                        
 
-                     //暂时用这种材质:
-                    if(fileInfo_.unlit && (!(child.material instanceof THREE.MeshBasicMaterial) || object.fileType == 'glb')){
+                     
+                    if(fileInfo_.unlit && (!(child.material instanceof BasicMaterial) /* || object.fileType == 'glb' */)){ //注释掉是因为已经写入到loader文件里了
                         //let material = new THREE.MeshBasicMaterial({map:child.material.map})
-                        let material = new BasicMaterial({map : child.material.map})  //很奇怪glb的图会使原本的MeshBasicMaterial 会偏暗,所以自己重新写
-                        
+                        let material = new BasicMaterial({map : child.material.map, opacity:child.material.opacity, color:child.material.color})  //很奇怪glb的图会使原本的MeshBasicMaterial 会偏暗,所以自己重新写
                         //child.material.dispose()
                         child.material = material 
                     } 
@@ -5289,9 +5301,10 @@ export class Viewer extends ViewerBase{
                         child.material = new THREE.MeshStandardMaterial()
                     } 
                     if(child.material instanceof THREE.MeshStandardMaterial){
-                        child.material.roughness = 0.7
-                        child.material.metalness = 0.5 
+                        /* child.material.roughness = 0.7
+                        child.material.metalness = 0.5  */
                     }
+                    //纯色的还是不能用BasicMaterial
                 } 
             } );
         }
@@ -5469,8 +5482,66 @@ export class Viewer extends ViewerBase{
             loaders.dxfLoader.load(fileInfo.url,(object)=>{
                 loadDone(object)
             },fileInfo) 
+        }else if(fileInfo.fileType == 'shp'){
+             
+            loaders.shapeLoader.transform = viewer.transform.lonlatToLocal;
+             
+            const shp = await loaders.shapeLoader.load(fileInfo.url);
+            const shpModel = shp.node
+            
+            loadDone(shpModel)
+            
+        }else if(fileInfo.fileType == '3dgs'){
+            
+            const gsViewer = new Potree.GaussianSplats3D.Viewer({ 
+                rootElement: this.renderArea,
+                threeScene: this.scene.scene,
+                renderer: this.renderer,
+                camera:  this.mainViewport.camera,
+                useBuiltInControls: false,
+                //dropInMode: true,
+                // sharedMemoryForWorkers:false  //否则 报错 Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': SharedArrayBuffer transfer requires self.crossOriginIsolated. 
+
+            });
+            //let path = Potree.resourcePath+'/models/gaussian/bonsai.ksplat';
+             
+            
+            gsViewer.addSplatScene(fileInfo.url, {
+                  'streamView': true
+                })
+                .then(() => {
+                    gsViewer.start(); 
+                    /* gsViewer.splatMesh.rotation.x = -2.365929590263301
+                    gsViewer.splatMesh.position.z = 5 */
+                    gsViewer.splatMesh.updateMatrix()
+                    gsViewer.splatMesh.updateMatrixWorld()
+                    gsViewer.splatMesh.visible = false
+                    //viewer.mainViewport.view.setView({position: new THREE.Vector3(-4.980,  -5.3879,  5.4503095), quaternion:new THREE.Quaternion(0.5750,-0.2809,-0.3372,0.6903)})
+                
+                    gsViewer.splatMesh.onSplatTreeReadyCallback = ()=>{ 
+                        let {sceneMax,sceneMin} = gsViewer.splatMesh.splatTree.subTrees[0]
+                        gsViewer.splatMesh.boundingBox.min.copy(sceneMin)
+                        gsViewer.splatMesh.boundingBox.max.copy(sceneMax)
+                        loadDone(gsViewer.splatMesh)
+                    } 
+                });
+            
+        
+            //window.gsViewer = gsViewer
+          
+            viewer.addEventListener('render.begin2',(e)=>{
+                if(e.name == 'scene'){ //gsViewer.selfDrivenUpdate()
+                    gsViewer.update()
+                
+                    if(gsViewer.initialized && gsViewer.splatRenderReady){
+                        gsViewer.splatMesh.visible = true
+                    } 
+                }
+            })
+        
         }
         
+        
          
     }
     

+ 9 - 1
src/viewer/EDLRendererNew.js

@@ -105,6 +105,7 @@ export class EDLRenderer{//Eye-Dome Lighting 眼罩照明
                 var rtEDL = this.getRtEDL(params.viewport)
                 if(rtEDL){
                     renderer.setRenderTarget( rtEDL );
+                    renderer.setClearAlpha(0)
                     renderer.clear( true, true, true );
                 }
                 
@@ -236,10 +237,17 @@ export class EDLRenderer{//Eye-Dome Lighting 眼罩照明
                     }else{
                         viewer.renderer.render(viewer.scene.scene, camera);
                     }
-                    if(Potree.settings.displayMode == 'showPanos' )return
+                    
                 }else{
                     viewer.renderer.render(viewer.scene.scene, camera);
                 }     
+                if(Potree.settings.displayMode == 'showPanos' ){
+                    if(Potree.settings.fastTran && viewer.images360.fastTranMaskPass.enabled){
+                        viewer.images360.fastTranMaskPass.render()
+                    } 
+                    return
+                }
+                 
                  
             }
             

+ 3 - 0
src/viewer/sidebar2.html

@@ -19,6 +19,9 @@
                     <li name="glb">
                         glb : <button name='operation'>添加</button>  <button name='select'> select </button>
                     </li>
+                    <li name="ply">
+                        ply : <button name='operation'>添加</button>  <button name='select'> select </button>
+                    </li>
                     <li name="3dTiles">
                         3dTiles : <button name='operation'>添加</button>  <button name='select'> select </button>
                     </li>

+ 0 - 596
改bug的历史.txt

@@ -1,596 +0,0 @@
-疑难杂症 -。-
-
-
-
-
-
-
-
-2024.2.4
-
-
-merge4dkk页面的window.THREE和ctrlPolygon的不是同一个,而和common.js的是同一个,导致在判断measure instanceof THREE.Object3D时为false。 另有Prism在被import时会执行两次该文件,输出的也不同,也会造成相同问题,一个在measuring一个在volumeComputer,但如果在ViewerNew不会。
-
-
-
-2023.12.29
-
-
-DepthImageSampler 
-let data = this.context.getImageData(0, 0, img.width , img.height ).data;  
-怎么还报错呢?!!
-
-(勘测华为平板)
-
-错误1:Failed to execute 'getImageData' on 'CanvasRenderingContext2D': Out of memory at ImageData creation
-
-错误2:cannot read properties of undefined (reading 'data')
-
-
-解决方案: 每帧至多执行一次 该设备就不报错了
-
-
-2023.12.15
-反馈说地图加载慢  
-https://laser.4dkankan.com/index.html?m=SS-3yiIoMBSnw&lang=zh#/data
-
-不稳定,有时候会卡住不加载,有时候加载很快
-
-修改了updateSubTiles中childLoaded的那一句。之前是遇到一个贴图没加载好的就停止继续执行(导致每次update至多只有一个贴图加载)。现在是放开了全部执行下去,反正也只是加到加载队列里。 效果明显提升,且不卡顿。
-
-
-2023.12.12
-
-本地版在合并站架式数据集后立即切换全景模式,首次,会无法切换。
-原因是曾切换showPanos后又自动切回showPointcloud, 在5秒内又切回showPanos,使checkAndWaitForPanoLoad开头的withinTime生效从而return.
-
-所以加了个监听,当切模式后,去掉isLoadedPanos记录
-
-
-2023.12.08
-本地版多个iframe崩溃
-内存占用2G 图片7G 时,进入数据集校准崩溃 (8个点云页面) 似乎是连续setSize的原因
-
-已经写了 let unfocusEvent = new CustomEvent('unfocusPage',{detail:{aaa:'hhh'}})等事件使unfocus后停止loop
-
-
-
-
-2023.11.13
-
-分享测量时地图的tile经常没加载完。场景SS-t-uMizHDioNE很明显,地图加载完了但entity俯视图几乎没加载。
-
-
-1先把waitLoadDone里检测到加载完后延迟50ms再执行回调,没用。
- 
-2后来发现一个bug,flytoPano中duration为0时重新计算了duration,导致地图恢复位置的过程被拉长,此bug修复后恢复1中所改。   但是改完后更严重了0.0。 
-
-3即使加长1中的时间到500ms也一样。
-
- 
-4发现即使waitLoadDone监听到loadingInProgress == 0后,如果继续等待,还会继续loadDone。所以其实没加载完。
-是因为没有连续加载吗? 
-
-5发现是经常存在loadingInProgress == 0后,有继续加载新的tile。原因未知(一定要上一个加载完才能计算之后的可见性?)。间隔时间能达到300ms。
-
-6 waitLoadDone 改完后加载了好久 - - 半分钟以上
-
-7 不截图,直接双屏展示,focus测量线,也是加载好久。 tile太小了。且开头一直加载深度图导致地图暂停下载
-
-8 map 的 update的var c = this.tileSizePx / i.length() / scale中的scale之前是针对地图加的,或许对俯视图不适用,去掉。且修改bias为0.5。情况好很多。
- 
-
- 
---------------
-
-2023.6.16
-iphone支持 EXT_DEPTH 的 orthoCamera下, paraboloid_point_shape形状的 点云绘制不出。导致无法pick出点云位置
-
-因为不支持的曾经加过这个:
-if(!Features.EXT_DEPTH.isSupported() && this.shape === PointShape.PARABOLOID){
-    this.shape = PointShape.SQUARE ;//强行替换
-}
-
-
-结果:在#if defined paraboloid_point_shape处添加一行:
-gl_FragDepthEXT = clamp(gl_FragDepthEXT, 0.0, 1.0);
-这句在解决ios16全景里经常有黑块是一样的处理方式。
-
---------------------------------------------------------------
-另外将depthBasicMaterial和线的resolution改为了resolution2否则手机的遮挡错误。但是为何之前没事?且专门记录了应该使用resolution
-
-
-
-2023.4.21
-
-
-SS-t-0lHRLIEqFY 场景的images360.cube抖动,导致整个画面在相机变化时扭曲
-只有在非普通cube创建出后才会,恢复为普通cube后就正常。但数据集的test boundingbox、buildingBox、测量线一直抖动。 
-
-
-三个数据集,前两个无深度图,最后一个有,且位置很远。
-
-也只有第三个数据集会产生抖动。应该是因为数字过大而精度不够。
-
-但为何点云、panoLabel不会抖动,可能因为geo规则。
-
-尝试将整体平移,使当前位置在原点,但特别麻烦,而且测量线正常了但cube总是不正常。放弃。
-
-( 大场景距离很远的话 也抖动,只是抖得不太一样,不会扭曲和撕裂)
- 
-
-
-
-
- 
-2023.2.17
-
-现象:转动过程中,面对相同的一块点云,有时候很流畅,有时候反向再转回去超级卡,但numVisiblePoints并无增加。
-
-如数据:
- NAME                  |    MIN | MEDIAN |    MAX |    AVE | SAMPLES 
- ----------------------------------------------------------------------
- loop                  |  0.700 |  7.300 | 11.500 |  7.322 |   50
- loopWaitNext          |  6.200 | 10.300 | 41.500 | 13.804 |   49
- mapRender             |  0.200 |  0.300 |  0.600 |  0.321 |   47
- numVisiblePoints      | 59.614 | 59.939 | 59.996 | 59.934 |   47
- render                |  0.000 |  6.300 |  9.500 |  6.134 |   50
- renderDefault         |  4.500 |  6.300 |  9.400 |  6.519 |   47
- renderNodes           |  1.300 |  2.200 |  3.500 |  2.233 |   94
- renderOctree          |  0.000 |  0.000 |  0.100 |  0.027 |   94
- renderOverlay         |  0.100 |  0.300 |  0.500 |  0.306 |   47
- update                |  0.500 |  0.900 |  1.700 |  0.958 |   50
- updateClouds          |  1.100 |  1.200 |  1.800 |  1.340 |   47
- visiStructure         |  0.000 |  0.100 |  0.300 |  0.140 |   47
- visibleNodes          | 536.000 | 544.000 | 554.000 | 544.426 |   47
-
-
-NAME                  |    MIN | MEDIAN |    MAX |    AVE | SAMPLES 
- ----------------------------------------------------------------------
- loop                  |  5.700 |  6.500 |  9.300 |  6.952 |   21
- loopWaitNext          | 40.700 | 43.500 | 44.200 | 43.100 |   20
- mapRender             |  0.200 |  0.300 |  0.400 |  0.295 |   21
- numVisiblePoints      | 59.880 | 59.959 | 59.999 | 59.955 |   21
- render                |  4.700 |  5.300 |  8.100 |  5.781 |   21
- renderDefault         |  4.700 |  5.300 |  8.100 |  5.776 |   21
- renderNodes           |  1.300 |  1.700 |  2.900 |  1.867 |   42
- renderOctree          |  0.000 |  0.000 |  0.100 |  0.033 |   42
- renderOverlay         |  0.200 |  0.300 |  0.300 |  0.257 |   21
- update                |  0.600 |  0.900 |  1.200 |  0.948 |   21
- updateClouds          |  1.100 |  1.400 |  1.800 |  1.405 |   21
- visiStructure         |  0.100 |  0.200 |  0.200 |  0.152 |   21
- visibleNodes          | 528.000 | 533.000 | 540.000 | 533.286 |   21
-
-
-这两个数据numVisiblePoints、visibleNodes相差很小,但是渲染时间却迥异,为何?
-再怎么卡,loopWaitNext也只需要等待一轮回,也就是小于16.6*2即可,这里却达到40!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2023.2.7
-
-发现viewer.update函数cpu高(降4倍),因为sidebar中某个函数所致。在正式laser工程中不会用到。
-
-改写renderOctree, 所有pointcloud只执行一次可以节省很多时间,但 adaptive型的点云遇到问题,无法支持。   所以点云编辑不能使用adaptive
-
-
-2023.1.4 
-
-cpu过高:(静止时)
-
-全景模式: 30-40  希望降到20以下   只绘制一次skybox:20-30   不渲染overlay: 15-35
-点云模式: 60  
-原本potree在无点云时也有30的cpu (15-36波动)
-
-若不渲染,cpu范围:5-20, 有时会到60咋回事。
-不 loop, cpu: 0
-仅update: cpu: 10
-仅render: cpu: 25 (全景)
-matterport无抗锯齿, 但potree关闭抗锯齿并无变化
-
-结论: 
- cpu高的原因:1渲染到rtEDL,很多depthMaterial的都需要。 2 renderOverlay的,如marker。 
-		3 点云加载、遍历一定会耗cpu   (点云的优势究竟是什么,比4dkk好在哪?)
-
-
-navvis居然全景和点云都能做到0,因为静止、画面无改变时 不渲染  invalidateScene
-但是这样的好处似乎很小:1 降低电池损耗 2或许能在不渲染时加快资源加载。而画面一旦动起来,cpu还是很高。
- 
-结局: 参照它们也做了静止时不渲染 viewer.dispatchEvent('content_changed') 
-
-
-
-
- 
- 
- 
-
- 
-
-
-2022.12.30
-全景漫游卡顿(持续了几个月的问题)
-特征:所有漫游点均是首次飞向它时流畅,但回头再走就容易卡。
-调试:不checkAndWaitForPanoLoad 然后updateCube  不卡。 和skybox的geo变化无关,不改geo也卡。
-进一步发现: 卡的时候uploadTile LoadComplete 经常到了2048。令只加载到1024不卡。所以似乎是加载越多tiles越卡。
-解决方案:maxNonBaseUploadsPerFrame由2降为1。也就是在飞行时每帧uploadTiles的个数降低。另外飞行时refreshUploadInterval的间隔增加。
-效果:确实降低了卡顿感。
-还有疑问:为何4dkk不卡呢?只是在cubeRenderTarget上draw而已呀。 大场景因模型复杂所以本身就卡。
-
-
-目前浏览器卡顿情况:
-良好:chrome、 edge
-微卡: qq 全景模式
-卡:opera
-很卡: firefox(点云模式也)
-
-2022.12.13
-
-漫游时经常要加载一两秒。 一开始以为是uploadTile加载问题,后来发现确实图没加载好,downloaded=false
-原来是populateScoredPanos时的distanceSquared函数有问题
-
-2022.11.24
-全景模式为什么有时候变卡:
-1 导航会一直加载点云,因一直getPointByScreen  (2d发来的请求) 
-2 将漫游模式的visibleNodes清空了,仅在不支持depthTex时length才不为0
-
-
-2022.8.30
-
-融合页面的分屏,为何在多次缩放后易卡顿?  
-
-
-为什么加载点云时,在right设置为active=false时无法渲染?删除点云也不行。但是此时将top.width设置为1,也就是禁止了scissorTest,就没问题
-且reticule所在之处能刷新画面。
-
-
-
-2022.8.22
-
-1
-glb 显示出的颜色比图片原本的颜色暗,但换成颜色没问题, obj图没问题。
-
-自己创建个mesh贴上glb的贴图也是暗。 可是官方编辑器glb没问题。 
-换DepthBasicMaterial可以  why?
-
-最后解决方案:自己写了个简单的BasicMaterial, 只贴贴图
-
-
-
-
-2 glb 大文件经常加载不成功
-
-在本地demo未出现。  Content-Type: application/octet-stream 这和本地加载不同:Content-Type: model/gltf-binary
-
-DOMException: The source image could not be decoded.
-
-
-将 CanvasTextrue ImageBitmapLoader 换成普通的texture后, 又容易崩溃。
-
-为什么要用CanvasTextrue 呢?我直接换成普通Texture了
-
-
-
-
-
-
-
-
-2022.7.22
-闪烁的原因?  之前出现过警告且黑屏的情况,但鼠标滑动后恢复
-[.WebGL-0000074204D3AA00] GL_INVALID_OPERATION: Must have element array buffer bound.
-
-延迟过渡或不修改geo时也会闪烁 
-在外侧 感觉有碎片,碎片是因为修改了深度的原因,但是去掉一样闪烁。
-hasDepthTex明明会改变材质的样子,但是漫游时没感觉?好像因为cameraHeight1不同 vWorldPosition0
-
-在非当前geo的点位下 bump就能有碎片感 why 似乎是从外侧就会 
-放大后还是闪烁,但改善一些。加延迟再好一些。  
-似乎在出门时容易闪烁 
-改为球体 不换geo 也闪烁 
-改为cube 不换不闪 换也闪  
-去掉camera_changed发送就可以了!! 
-今天不闪烁了 但是有时候很卡 (莫名其妙)   
- 
-似乎会出 贴图碎片加载。 黑块
-
-又警告[.WebGL-000020FC00B72900] GL_INVALID_OPERATION: Must have element array buffer bound.
-
-不使用getIntersect 中改变相机的操作 就不会。  现在在hasDepthTex时还蛮流畅的
-
-但即使不改变该相机也会,所以应该是pick时render出问题。可能没还原状态。 可之前经常要用到pick
-
-即使不更改geometry,只pick,也会出现,但频率降低。  完全不使用getIntersect但过渡前摆动鼠标也会, 旧代码偶现
-
-找不到原因,暂时只能保证有深度图时不执行点云pick
-
-但没有深度图的依然存在这个问题,且过渡后会黑屏闪烁一下 
-
-2022.7.8
-
-为何每次截图都不一样?? 和等待时长有关系?
-点云位置一样,但稀疏程度不同。
-平面图显示的数据集还是不同 发现atDatasets和pdf显示的不同,但两次截图楼层一致,第一次多了个buildchagne到其他楼层
-
-可能因为在分屏后移动了相机,但是更新building只500ms一次
-
-
- 为何相同位置pointInWhichEntity得到的entity不同?  其中一个多了次非force  currentDataset也不一样!
-是因为Common.intervalTool.isWaiting延时了并没有立即执行!
-
-
- 
-
-
-
-2022-05-12 
- 
-为什么lineMaterial 在四屏中  setSize后,遮挡失效,要移动一下镜头才恢复? 但是在双屏中没事。 updateDepthParams()也没用。 
-	只要有第三个viewport高度不为0,就会这样。 那估计是edl在别的屏幕渲染了
-	因为不同viewport需要用不同的rtEDL  
-
-
-2022-04-24 
-ios 15.4.1 渲染问题,好像clear有时失效
-	 相机离远后就留下了没clear的画面   
-	 全景图显示不出
-	viewer.dispatchEvent({type: "render.begin",  viewer: viewer, viewport:view, params })这句 删除后改善很多, 或者sprite 的applyMatrix不执行(如果执行,在不改变位移时也正常)	
-	但同时也要删除  if(width == 0 || height == 0)return  但只要在this.renderer.render(this.scene.scene, camera);  之后return也可
-	  
-	在loop中	延迟渲染也一样有问题  
-
-	只渲染overlay且不clear时,电脑是不clear的状态但是这个手机竟然自动clear了,全景图也能显示出,而且没有执行renderer.clear,也无gl.clear。执行renderer.clear反而有残影
-	但clearcolor确实没有生效 
-	地图正常(使gl.clear非正常执行 ) 
- 
-	用地图的renderer在地图渲染三维的场景clear也正常 
-	是不是有类似setSize的函数可以起到clear的作用? 没找到
-
-
-	发现测量线最能引起这个bug,然后就发现navvis测量也这样了。
-  	但具体哪一句造成一开始加载就
-
-
-	专注一下后续系统或者navvis是否解决。暂时屏蔽了EXT_frag_depth
-
- 
-
-
-2022-04-18
-
-4dkk上传下载页面 上传全景图后首次刷新会有黑块 (只在上传下载页面才会) 
-  (!i || i && i === r.tile.panoId) && r.level 这个报错,原因未知,修改了一下,不报错但还是会黑块 
-同时出现automation没有init,原因是图没加载好,所以startInside没有成功回调 
- 需要关闭浏览器的禁止缓存,否则bug出现不了
-
-虽然不知道为什么图加载顺序和通常的不一样了,但终结原因是图加载的问题,故而修改了下uploadTile,增加LodDescripor.uploaded,可控性更强;但希望ignore不会造成有一部分模糊这种情况
- 
- 
-
- 
-
-
-
-2022-04-15
-该双数据集场景全景模式拖拽画面时扭曲抖动特别厉害,猜测是因为boundingbox非常大导致skybox非常大? 
- viewer.images360.cube.scale : 22692.381042028544, y: 1525345.1015381122, z: 7.563655000000001, 
-xyz改为一样 ,后不抖动了, 但是旋转时会有黑影闪现。 
-far增大, 黑影消失, 但是能看到贴图水平或垂直有一条白线 
-把位置放到相机的位置后 就正常了!
-
-综上猜测是精度问题?所以最好是居中于相机的正方体?可过渡怎么办 
-http://localhost:8080/index.html?m=t-OdiKZBDVL0#/data
-
-但是这样bump时几乎没有移动,左右bump不可能用fov 
-
-结论:修改了updateCube函数
-
-
-2022-03-23
-四个屏的mainview中的reticule位置改变特别慢(intersect是错的)
-·四个屏都这个也一样  把beforeRender去掉也是  但是双屏不会
-·左上角 右下角屏也会了?!
-·在多个屏交替hover久一点就会明显  像卡顿
-·如果mianView以外的都active =  false 就正常。只要放出一个,就不正常
-·如果地图的noPointcloud没有一开始设置为false,双屏也会! 所以和点云渲染有关
-·如果没有hover到别的viewport就正常
-·会不会是nodes的切换问题
-·加了这句就行了Potree.updatePointClouds
-·3.31发现bug又出现了了, 是因为修改了四个屏幕的点云质量,要在pick前执行一下beforeRender
-
-
-子问题:为什么pick截图保存到的是一整张图?而我自己改成pickState.renderTarget.scissor 这种绘制的就不会,但是清除也只清除当前区域了。
-·发现是因为之前绘制的没被清除,只有改变了画面才会清除。可是已经clear了呀。(猜测是因为这个关系所以会互相影响)
-·把clear提前到scissor之前就和原代码效果一致了 
-·但是改好了这个还是会,而且即便只刷新要读取的区域,也不影响才对。 
-
-
-
-
-
-
-
-
-
-
-2022-03-22
-为什么到另一个数据集cursor不准确。因为数据集不在000吗
-·单个数据集校准后也会,可能因为没更新node的matrixWorld(所以要在Alignment中就实时更新)
-	 见:node.sceneNode.matrixWorld.multiplyMatrices(pointcloud.matrixWorld, node.sceneNode.matrix);
-·方向就也不对 
-·是reticule的normal乘错了矩阵 
-
-
-
-
-
-
-
-
-2022-03-18
-出现过marker无法松开的情况(加载的数据),但是再选中房间又可以了
-·是dropMarker时 因为有相同点 return continueDrag了
-·数据里竟然有五个点,后两个相同。应该是添加时没删除
-·是绘制完前删最后一个点后没有发送update
-
-
-
-2022-03-03
-
-有时候加载全景图一直loading。 
-
-·六张512的有一张未打印出加载成功(但实际在网络里查看是加载了的,tileDownloader也有值),然后就去加载更高分辨率去了,没发送成功。
-·没通知成功的原因是uploadTile那张512时已经加载好了子集1024,就跳过了。
-·原来是预加载的dir写错了。但是只是预加载的话大概率不会发生此bug而已。
-·但万一先关闭了全景,在一个没有预加载的点位上打开全景,就可能发生bug
-·问题的关键在于4dkk一定先uploadTile低分辨率的,而这里乱序了
-·发现失败的原因是forceQueue  512的加载太慢了,为什么不是一开始就有6个呢,不到6个就没了然后就下载1024去了。难道4dkk不会吗
-·是先开始下载的512,但是1024的先下载完毕。 
-·4dkk 也可能因为uploadTile失败,而不发送完成消息,通常都是1024的。
-
-forceQueue在tiledownloader和panorenderer都有。
-forceQueue 的应该就是优先下载的吧,按理说一定要先下载完才能下载后面的在 
-在panoRenderer中 uploadQueues 是候补队列 ,在tileDownloader里priorityQueue是候补队列 
-tiledownloader下载完成会触发tiledownloader开始uploadTile.
- 
-·试不出来为什么4dkk会先下载完512了。改个代码,确保512的都下载完后才能下载其他的。修改了tileDownloader的processQueueForDownloading
-
-
-
- 
-
-
---更早前:
-
-关于测量线截图1024时常get不到的情况:(奇怪为什么之前不会这样?)
-原因: uploadTile中,如果某个tile的子集(如1024的子集是四个2048)已经加载好了,那么该tile就不会触发加载,也就不会发送加载成功的消息。
-所以最好还是只请求加载512.除非首次加载就请求高分辨率。(是不是我写漏了啥?因为4dkk 飞进去不会)
-4dkk中也可能不一定发送1024的完成信息
-
-
-
-
-2022-03-02
-
-
-
-初始画面还是会转一下 t-1aw99jhDgB#/setup  在未设置过初始画面的场景才会 
-·又好像是某些角度会算错。
-·原来是set rotation(rotation)函数有问题,没有考虑到y也有值。 
-
-
-
-
-触屏放大镜里的点云为何那么大???
-·只要一转为触屏就这样  pointsize和什么有关,会重新计算吗
-·自适应时的触屏devicePixelRatio是2!!
-·shader中计算pointsize时最关键的参数是uScreenHeight。由于我在渲染屏幕点云时乘了devicePixelRatio,所以无论devicePixelRatio多少看起来都一样大;但是放大镜也被乘了devicePixelRatio,所以放大了。它的devicePixelRatio应该永远为1
-·考虑修改uScreenHeight为resolution2.y , 并取消乘以devicePixelRatio
- 
-
-低质量点云测量怎么点不上?
-·e.intersectPoint 居然没有
-·好像是因为改了shader后resolution没赋值,都是0,而电脑会给一个最小pointsize,手机可能更小吧? 所以pick不出。赋值就ok了
-
-
-
-
-2022-03-01
-
-(测量-移动端)移动端无法进行测量,无法确定测量起点
-·该手机iphone7plus 竟然加载了两个点云! 但是本地版却不会。 等中午重新发布后看看。
-·发现spacing有误 中心点 boundsize有误  但数据集id没错。刷新缓存或许可以。 或许是cloud.js是旧的?
-·清除缓存后正正常了。因为重算了场景,所有点云数据会修改。 加个后缀
- 
-
-
-
-
-2022-02-25
-关于 丽篮电脑和我的手机t-FhDWmV5xur场景在海拔模式下 某个漫游点刚进入场景全景图有一面(立方体中的一面)亮度超高的bug:
-·只有带了token才会 或许是因为token占用了什么时间?
-	https://uat-laser.4dkankan.com/uat/index.html?m=t-FhDWmV5xur&lang=zh&token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxODgxOTI3MjIwOCIsInVzZXJOYW1lIjoiMTg4MTkyNzIyMDgiLCJpYXQiOjE2NDU3NTI0MzYsImp0aSI6IjYwYTJiYjlhLTIyN2MtNGVhMi1iNWFkLWZhODIwMDk3ZDU3MSJ9.mlUUeIyPVYLGqeLGuu_gZzkDwotpgb_704BNe2kPlPY#/
-	开头多了DevTools 无法加载来源映射:无法加载 webpack:///spug/spug_api/repos/29_1660_20220224180315/node_modules/mitt/dist/mitt.mjs.map 的内容:HTTP 错误:状态代码 404,net::ERR_UNKNOWN_URL_SCHEME 等打印
-·发现此场景的部分漫游点的id和originID不一致。 且原4dkk场景漫游点id从0-24(但少一个18), 而此激光场景缺少了originId为0 的点。	
-对应: 
-	id     originID
-	 0  --  19  (多了一个19,正确应该是0。故而贴图错误)
- 	18  --  19  (对的)
- 	19  --  20
- 	20  --  21
- 	21  --  22
- 	22  --  23
- 	23  --  24
-刷新id又正常了???
-手机上看不发白了(电量原因吗) 手动改data[0].file_id = '00019' 也不发白
-手机加了test就可以,不加就会有问题。 
-我发现和海拔没有关系,只和透明度有关系。只要透明度不是1,刷新就会这样(所以之前的海拔是错误信息,为什么我没自己验证一下呜呜)
-
-
-
-奇怪后面怎么没记录了?是不是被覆盖了?解决方案好像是在potreeRenderer里加了 gl.disable(gl.BLEND) 等 恢复为不透明
-
-
-
-
-
-2022-02-24
-关于iphone测试机旋转屏幕or点击小地图后mainViewer setSize导致webgl context lost 的bug:
-	·修改canvas.width height就会
-	·不渲染的话不会。 
-	·仅显示地图、隐藏场景才会 
-		pRenderer.clearTargets(params); pRenderer.render(params); 这两句去掉就不会
-		第二句主要是执行到点云渲染 renderOctree
- 		setSize后重新渲染的时候才会崩溃,也就是延迟多久渲染就延迟多久崩溃
-
-	·直接把this.rtEDL.setSize去除居然不崩。但如果默认设置DepthTexture宽高不为undefined or 0 或和rtEDL大小不一样,也会崩。   延迟resize也不行,所以应该是大小不匹配的问题。
-	 结论:无解了,直接去掉rtEDL吧。反正崩溃的手机刚好EXT_frag_depth不可用,所以用不到rtEDL
-
-
-
-关于iphone离开网页一段时间后再回来,重启(or显示内存不足)的bug: 
-	
-	·隧道。。第一次测会,第二次就不会了奇怪。。。(但有时候打开是报网络错误)
-
-	·我的手机是可能白屏(清除缓存后不会了)
-	·微信会(可能是应用问题,因为应用也容易关闭)	
-	·无解
-
-
-
-
-
-2022-02-23
-关于iphone测试机创建不了potree中的program:
-	·t-6UoYGXbWhi 这个场景(最不容易崩溃 只有一个pano)的无此问题	
-	·即使把mapViewer禁止渲染,使potree的program是第一个创建的program也不行
-	·有一个场景有时候可以打开 https://uat-laser.4dkankan.com/uat/index.html?m=t-6UoYGXbWhi
-	·和点位无关,删除全部点也不行
-	·不渲染点云,只创建three.js中的program也失败 
-	·binaryLoader中load(node){ 不加载点云也失败
-	·延迟start也不行
-
-	·在开始创建gl的时候获取是可以的! 但在循环渲染时,到刚开始渲染点云之前为false(怎么知道要渲染了?)
-	好像不是edl渲染才报错的。 是在此之前有其他的东西报错了  
-  
-	是这个。。。this.shadowMap = new PointCloudSM(this.viewer.pRenderer);
-
-
-
- 
-