ソースを参照

depth:突然发现ratio>1的用resolution不对,得用2才对。但是之前明明记得不是这样

xzw 2 年 前
コミット
db2f425566

+ 1 - 1
libs/three.js/lines/LineMaterial.js

@@ -861,7 +861,7 @@ class LineMaterial extends ShaderMaterial {
         this.events = {
             setSize:(e)=>{//如果出现横条状的异常,往往是viewportOffset出错  //地图不需要
                 let viewport = e.viewport 
-                this.uniforms.resolution.value.copy(viewport.resolution)  
+                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

+ 2 - 2
src/custom/materials/DepthBasicMaterial.js

@@ -40,14 +40,14 @@ export default class DepthBasicMaterial extends THREE.ShaderMaterial{
         })
          
         
-        
+         
         this.events = {
             setSize:(e)=>{//如果出现横条状的异常,往往是viewportOffset出错  //地图不需要
                 if(!this.useDepth /* || !e.viewport.camera.isPerspectiveCamera  */|| !e.viewport)return
                 let viewport = e.viewport
                 let viewportOffset = viewport.offset || new THREE.Vector2() 
                 
-                this.uniforms.resolution.value.copy(viewport.resolution)  
+                this.uniforms.resolution.value.copy(viewport.resolution2)  //2023.6.12突然发现ratio>1的用resolution不对,得用2才对。但是之前明明记得不是这样
                 this.uniforms.viewportOffset.value.copy(viewportOffset)
             },
             render:(e)=>{//before render  如果有大于两个viewport的话,不同viewport用不同的depthTex

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

@@ -64,11 +64,18 @@ export default class Sprite extends THREE.Mesh{
     }
     
     realVisible(){
+        
+        if(!this.visible && this.unvisibleReasons && this.unvisibleReasons.some(e=>e != 'unableCompute')){
+            return false
+        }
+        
+        
         let v = true 
-        let parent = this 
-        let lastParent
+        let parent = this.parent 
+        let lastParent = this
+        
         while(parent){
-            if(parent.visible === false){
+            if(parent.visible === false ){
                 v = false
                 break; 
             }
@@ -120,7 +127,7 @@ export default class Sprite extends THREE.Mesh{
                 
                 
                 let r1 = Potree.Utils.getPos2d(center, camera, viewer.renderArea, e.viewport); 
-                if(!r1.trueSide)return //Potree.Utils.updateVisible(this, 'notTrueSide', false); 但这句会使realVisible为false从而无法更新//console.error('!r1.trueSide') //中心点如果在背面直接不渲染了
+                if(!r1.trueSide)return  Potree.Utils.updateVisible(this, 'unableCompute', false);// 但这句会使realVisible为false从而无法更新//console.error('!r1.trueSide') //中心点如果在背面直接不渲染了
                     
                 let r2, point2
                 
@@ -140,7 +147,8 @@ export default class Sprite extends THREE.Mesh{
                     }else{
                         let dis = r2.pos.distanceTo(r1.pos)
                         if(dis == 0){
-                            console.log('dis == 0') 
+                            //console.log('dis == 0') 
+                            Potree.Utils.updateVisible(this, 'unableCompute', false)
                             return
                             break
                         } 
@@ -156,7 +164,7 @@ export default class Sprite extends THREE.Mesh{
                 //console.log(p2StateHistory,len)
                 
                 if(!r2.trueSide){
-                    return //Potree.Utils.updateVisible(this, 'notTrueSide', false), console.log('  !r2.trueSide', )
+                    return  Potree.Utils.updateVisible(this, 'unableCompute', false)//, console.log('  !r2.trueSide', )
                 }
                 //Potree.Utils.updateVisible(this, 'notTrueSide', true)