xzw 1 rok temu
rodzic
commit
52681cc0ef

+ 6 - 4
libs/three.js/lines/LineMaterial.js

@@ -864,7 +864,7 @@ class LineMaterial extends ShaderMaterial {
                 this.uniforms.resolution.value.copy(viewport.resolution2)  
                 this.uniforms.devicePixelRatio.value = window.devicePixelRatio 
                 this.lineWidth = this.lineWidth_ //update
-                if(!this.useDepth /* || !e.viewport.camera.isPerspectiveCamera  */|| !e.viewport)return
+                if(!this.realUseDepth || !e.viewport)return
                 let viewportOffset = viewport.offset || new THREE.Vector2() 
                 this.uniforms.viewportOffset.value.copy(viewportOffset)
                 
@@ -903,7 +903,7 @@ class LineMaterial extends ShaderMaterial {
              
             if(value){
                 viewer.addEventListener("render.begin",  this.events.render)  
-                this.events.setSize( {viewport:viewer.mainViewport} )  
+                
                 this.updateDepthParams() 
             }else{
                 viewer.removeEventListener("render.begin",  this.events.render)  
@@ -914,7 +914,7 @@ class LineMaterial extends ShaderMaterial {
     } 
     
     
-    setRealDepth(useDepth){//确实使用到depthTex
+    setRealDepth(useDepth, viewport){//确实使用到depthTex
         if(this.realUseDepth != useDepth){
             if(useDepth ){
                 this.defines.useDepth = ''  
@@ -924,6 +924,8 @@ class LineMaterial extends ShaderMaterial {
             this.realUseDepth = useDepth
             if(this.autoDepthTest)this.depthWrite = this.depthTest = !useDepth  //如果useDepth = false,使用原始的depthTest
             this.needsUpdate = true
+            if(!viewport)viewport = viewer.mainViewport //暂时这么设置
+            useDepth && this.events.setSize({viewport})
         }
     }
     
@@ -939,7 +941,7 @@ class LineMaterial extends ShaderMaterial {
         let hasDepth = this.useDepth && Potree.settings.displayMode == 'showPointCloud' &&
                 (Potree.settings.pointEnableRT || viewer.useEDL)
          
-        this.setRealDepth(hasDepth)
+        this.setRealDepth(hasDepth, viewport)
         
         if(hasDepth){
             this.uniforms.depthTexture.value = viewer.getPRenderer().getRtEDL(viewport).depthTexture   //其实只赋值一次就行

+ 11 - 9
src/custom/materials/DepthBasicMaterial.js

@@ -43,7 +43,7 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
          
         this.events = {
             setSize:(e)=>{//如果出现横条状的异常,往往是viewportOffset出错  //地图不需要
-                if(!this.useDepth /* || !e.viewport.camera.isPerspectiveCamera  */|| !e.viewport)return
+                if(!this.realUseDepth || !e.viewport)return
                 let viewport = e.viewport
                 let viewportOffset = viewport.offset || new THREE.Vector2() 
                 
@@ -53,12 +53,12 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
             render:(e)=>{//before render  如果有大于两个viewport的话,不同viewport用不同的depthTex
                 this.updateDepthParams(e)
             },
-            cameraChange:(e)=>{
+            /* cameraChange:(e)=>{
                 if(e.changeInfo.projectionChanged){//resize时也会触发。虽然保守起见的话加上resize比较好//所以当时为何不用resize
                     //console.log('projectionChanged')
                     this.events.setSize(e)  
-                }
-            }
+                } 
+            } */
             
         }
         if(o.mapColorReplace){
@@ -96,19 +96,19 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
              
             if(value){
                 viewer.addEventListener("render.begin",  this.events.render) 
-                viewer.addEventListener('camera_changed', this.events.cameraChange)  
-                this.events.setSize( {viewport:viewer.mainViewport} )  
+                //viewer.addEventListener('camera_changed', this.events.cameraChange) 
+                viewer.addEventListener('resize', this.events.setSize)  
                 this.updateDepthParams() 
             }else{
                 viewer.removeEventListener("render.begin",  this.events.render)  
-                viewer.removeEventListener('camera_changed', this.events.cameraChange)
+                viewer.removeEventListener('resize', this.events.setSize)
             }
         }
         
     } 
     
     
-    setRealDepth(useDepth){//确实使用到depthTex
+    setRealDepth(useDepth, viewport){//确实使用到depthTex
         if(this.realUseDepth != useDepth){
             if(useDepth ){
                 this.defines.useDepth = ''  
@@ -118,6 +118,8 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
             this.realUseDepth = useDepth
             if(this.autoDepthTest)this.depthWrite = this.depthTest = !useDepth  //如果useDepth = false,使用原始的depthTest
             this.needsUpdate = true
+            if(!viewport)viewport = viewer.mainViewport //暂时这么设置
+            useDepth && this.events.setSize({viewport})
         }
     }
     
@@ -179,7 +181,7 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
                 (Potree.settings.pointEnableRT || viewer.useEDL)
          
          
-        this.setRealDepth(hasDepth)
+        this.setRealDepth(hasDepth, viewport)
         
         if(hasDepth){
             this.uniforms.depthTexture.value = viewer.getPRenderer().getRtEDL(viewport).depthTexture   //其实只赋值一次就行

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

@@ -422,7 +422,7 @@ class Panorama extends THREE.EventDispatcher{
         ); 
         this.images360.node.add(this.label2);
         this.floorPosition && this.label2.position.copy(this.floorPosition)
-        let s = 0.4
+        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)

+ 15 - 14
src/custom/objects/Sprite.js

@@ -30,27 +30,23 @@ export default class Sprite extends THREE.Mesh{
         this.visible_ = true
         
         
-        let update = (e)=>{
-            //this.update(e)
-            this.needsUpdate = true
+        let clear = (e)=>{ 
+            this.matrixMap.clear()//清空后在所有viewport上都必须更新才能渲染    //this.needsUpdate = true
         }
-        viewer.mapViewer && viewer.mapViewer.addEventListener("camera_changed",  update) 
-        viewer.addEventListener("camera_changed",  update) 
-        /* if(viewer.viewports.length == 1){//直接更新。如果有多个不在这更新,在"render.begin"
-            this.update(e)
-        } */
+        viewer.mapViewer && viewer.mapViewer.addEventListener("camera_changed",  clear) 
+        viewer.addEventListener("camera_changed",  clear) 
          
         
         let applyMatrix = (e)=>{
-            if(this.needsUpdate) this.update(e)
-            else this.applyMatrix(e)
+            /* if(this.needsUpdate) this.update(e)
+            else  */this.applyMatrix(e)
         }
         viewer.addEventListener("raycaster", applyMatrix)        //before render
         viewer.addEventListener("render.begin", applyMatrix) //before render  //magnifier时要禁止吗
             
         this.addEventListener('dispose', ()=>{
-            viewer.mapViewer && viewer.mapViewer.removeEventListener("camera_changed",  update) 
-            viewer.removeEventListener("camera_changed",  update) 
+            viewer.mapViewer && viewer.mapViewer.removeEventListener("camera_changed",  clear) 
+            viewer.removeEventListener("camera_changed",  clear) 
             viewer.removeEventListener("raycaster", applyMatrix)        //before render
             viewer.removeEventListener("render.begin", applyMatrix)
              
@@ -60,9 +56,10 @@ export default class Sprite extends THREE.Mesh{
     }
     
     set visible(v){
+        let oldV = this.visible_
         this.visible_ = v  
-        if(v){
-            this.update()
+        if(v && !oldV){ 
+            this.matrixMap && this.matrixMap.clear() //this.update() //update内有unableCompute会无限回调
         }
     }
     get visible(){
@@ -108,6 +105,10 @@ export default class Sprite extends THREE.Mesh{
     
     
     
+    waitUpdate(){
+        this.matrixMap.clear()//清空后在所有viewport上都必须更新才能渲染 
+        //viewer.dispatchEvent('content_changed')
+    }