xzw 2 lat temu
rodzic
commit
da9d78aabd
2 zmienionych plików z 107 dodań i 15 usunięć
  1. 106 14
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map

+ 106 - 14
public/lib/potree/potree.js

@@ -54064,6 +54064,93 @@
 
 	    }
 
+	}; 
+
+	function ascSort$1( a, b ) {
+
+		return a.distance - b.distance;
+
+	}
+
+
+	function intersectObject$1( object, raycaster, intersects, recursive,  ignoreUnvisible ) {
+	    
+	    if(ignoreUnvisible && !object.visible)return  //add
+	    
+		if ( object.layers.test( raycaster.layers ) ) {
+
+			object.raycast( raycaster, intersects );
+
+		}
+
+		if ( recursive === true ) {
+
+			const children = object.children;
+
+			for ( let i = 0, l = children.length; i < l; i ++ ) {
+
+				intersectObject$1( children[ i ], raycaster, intersects, true, ignoreUnvisible);
+
+			}
+
+		}
+
+	}
+
+	Raycaster.prototype.intersectObject = function ( object, recursive, optionalTarget, ignoreUnvisible ) {
+
+	    const intersects = optionalTarget || [];
+	 
+	    intersectObject$1( object, this, intersects, recursive, ignoreUnvisible );
+
+	    intersects.sort( ascSort$1 );
+
+	    return intersects;
+
+	}; 
+
+	Raycaster.prototype.intersectObjects = function ( objects, recursive, optionalTarget, ignoreUnvisible ) {//add ignoreUnvisible 跳过不可见
+
+	    const intersects = optionalTarget || [];
+
+	    if ( Array.isArray( objects ) === false ) {
+
+	        console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );
+	        return intersects;
+
+	    }
+
+	    for ( let i = 0, l = objects.length; i < l; i ++ ) {
+
+	        intersectObject$1( objects[ i ], this, intersects, recursive, ignoreUnvisible );
+
+	    }
+
+	    intersects.sort( ascSort$1 );
+
+	    return intersects;
+
+	};
+
+
+
+	Object3D.prototype.realVisible = function(){
+	    let v = true; 
+	    let parent = this; 
+	    let lastParent;
+	    while(parent){
+	        if(parent.visible === false){
+	            v = false;
+	            break; 
+	        }
+	        lastParent = parent;
+	        parent = parent.parent;
+	    }
+	     
+	    if(v && !(lastParent instanceof Scene)){//已被删除
+	        v = false;
+	    }   
+	    return v                                
 	};
 
 	var MathLight = {};
@@ -91923,7 +92010,7 @@ void main()
 	        //this.hoverViewport.beforeRender && this.hoverViewport.beforeRender()
 	        
 	        viewer.dispatchEvent( {type:'raycaster',  viewport: this.hoverViewport});//add
-			let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true); //原本是false 检测不到children
+			let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true, null, true); //原本是false 检测不到children
 	    
 	        let intersectionsCopy = intersections.slice();
 	        
@@ -98584,17 +98671,17 @@ void main()
 	        if (!pano) {
 	            console.error("Player.checkAndWaitForTiledPanoLoad() -> Cannot load texture for null pano.");
 	        }
-	         
+	          
 	        var vectorForward = this.getTileDirection(); 
-	       
-	        
+	         
+	            
 	        if (!pano.isLoaded(basePanoSize)) {
 	            iswait && viewer.waitForLoad(pano, function() {//发送loading
 	                return pano.isLoaded(basePanoSize)
 	            }); 
-	            
+	              
 	        
-	            
+	              
 	            /* var fov = {//test for direction  预加载的边缘有一丢丢不准确,尤其在相机倾斜时(4dkk也是)。
 	                hFov: cameraLight.getHFOVForCamera(viewer.scene.getActiveCamera()  ),
 					vFov: viewer.scene.getActiveCamera().fov
@@ -98648,8 +98735,8 @@ void main()
 	        let depthTiming = Potree.timeCollect.depthSampler.median;        
 	        let checkIntersect = o.checkIntersect;// && depthTiming < 0.3
 	                
-	                 
-	             
+	                     
+	              
 	        if(o.boundSphere){//只接受boundSphere
 	            let aspect = 1;//size.x / size.y
 	            let dis;
@@ -99739,12 +99826,12 @@ void main()
 	        
 	        viewer.addTimeMark('updateCube','end');
 	        
-	        
+	            
 	        /* 
 	            关于卡顿:
 	            即使使用cube,若scale设置为只容纳两个pano,也会卡顿。但也是有的卡有的不卡。
 	            若按照原先的复杂geo,一般在平直的街道上行走流畅,经过拐弯或者复杂区域较卡。减小geo复杂度没有什么作用。
-	            
+	              
 	         
 	            注: 修改skybox,若不准的话,会遮住其他mesh,比如marker。尤其在没有深度贴图时。 
 	            
@@ -146573,7 +146660,8 @@ ENDSEC
 	                        if (!renderMap[tile.id]) {
 	                            console.error('TILE SELECTED BUT NOT LOADED!!', tile.id);
 	                        }
-	                        else {
+	                        else { 
+	                            
 	                            // Make sure it's visible 
 	                            if(!renderMap[tile.id].visible){
 	                                if(visiVertexCount<maxVertexVisi){
@@ -146583,7 +146671,11 @@ ENDSEC
 	                                }else {
 	                                    console.log('超出', visiVertexCount);
 	                                }
-	                            }  
+	                            }   
+	                            /* if(!renderMap[tile.id].realVisible()){
+	                                console.error('!realVisible')
+	                            } */
+	                            
 	                        }
 	                    }
 	                    else {
@@ -146775,14 +146867,14 @@ ENDSEC
 	    }
 	}
 	function createGLTFNodes(gltfLoader, tile, unlitMaterial, options, rootTransformInverse) {
-	      
+	    
 	    return __awaiter(this, void 0, void 0, function* () {
 	        return new Promise((resolve, reject) => {
 	            var _a;
 	            const rotateX = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), Math.PI / 2);
 	            const shouldRotate = ((_a = tile.tileset.asset) === null || _a === void 0 ? void 0 : _a.gltfUpAxis) !== "Z";
 	            // The computed trasnform already contains the root's transform, so we have to invert it
-	            const contentTransform = new Matrix4() .fromArray(tile.computedTransform).premultiply(rootTransformInverse); //xzw 删。原先的会造成移动后tiles错乱
+	            const contentTransform = new Matrix4().fromArray(tile.computedTransform).premultiply(rootTransformInverse); //xzw 删。原先的会造成移动后tiles错乱
 	            if (shouldRotate) {
 	                contentTransform.multiply(rotateX); // convert from GLTF Y-up to Z-up
 	            }

Plik diff jest za duży
+ 1 - 1
public/lib/potree/potree.js.map