Преглед изворни кода

fix: 3dtiles改善卡顿,扩大缓存。但限制最大顶点可能有问题

xzw пре 2 година
родитељ
комит
e5ae2fe564
2 измењених фајлова са 40 додато и 12 уклоњено
  1. 39 11
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map

+ 39 - 11
public/lib/potree/potree.js

@@ -59213,8 +59213,8 @@
 	        }
 	    },
 	     
-	  
-
+	   
+	 
 	    getBestCount : function(name, minCount=1,maxCount=6, durBound1 = 1.2, durBound2 = 10, ifLog){
 	       
 	       
@@ -129017,6 +129017,17 @@ ENDSEC
 	PERFORMANCE OF THIS SOFTWARE.
 	***************************************************************************** */
 
+
+	window.visiVertexCount = 0;
+	window.visiGeoCount = 0;
+	const maxVertexVisi = 5e6;
+	const maxTexVisi = 500;
+
+
+
+
+
+
 	function __awaiter(thisArg, _arguments, P, generator) {
 	    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 	    return new (P || (P = Promise))(function (resolve, reject) {
@@ -146494,13 +146505,23 @@ ENDSEC
 	                            console.error('TILE SELECTED BUT NOT LOADED!!', tile.id);
 	                        }
 	                        else {
-	                            // Make sure it's visible
-	                            renderMap[tile.id].visible = true;
+	                            // Make sure it's visible 
+	                            if(!renderMap[tile.id].visible){
+	                                if(visiVertexCount<maxVertexVisi){
+	                                    renderMap[tile.id].visible = true;
+	                                    visiVertexCount += renderMap[tile.id].vertexCount;  //xzw add
+	                                }else {
+	                                    console.log('超出', visiVertexCount);
+	                                }
+	                            }  
 	                        }
 	                    }
 	                    else {
 	                        if (renderMap[tile.id]) {
-	                            renderMap[tile.id].visible = false;
+	                            if(renderMap[tile.id].visible){
+	                                renderMap[tile.id].visible = false;
+	                                visiVertexCount -= renderMap[tile.id].vertexCount;  //xzw add
+	                            } 
 	                        }
 	                    }
 	                }
@@ -146508,6 +146529,7 @@ ENDSEC
 	                while (unloadQueue.length > 0) {
 	                    const tile = unloadQueue.pop();
 	                    if (renderMap[tile.id] && tile.contentState == TILE_CONTENT_STATE.UNLOADED) {
+	                        //console.log('removevisi', renderMap[tile.id].visible) 如果是true,visiVertexCount要减
 	                        root.remove(renderMap[tile.id]);
 	                        disposeNode(renderMap[tile.id]);
 	                        delete renderMap[tile.id];
@@ -146688,7 +146710,7 @@ ENDSEC
 	                (gltf) => {
 	                    const tileContent = gltf.scenes[0];
 	                    //tileContent.applyMatrix4(contentTransform);
-	                     
+	                    tileContent.vertexCount = 0;   //xzw add
 	                    tileContent.traverse((object) => {
 	                        if (object.type == "Mesh") {
 	                            const mesh = object;
@@ -146726,6 +146748,10 @@ ENDSEC
 	                            if (options.computeNormals) {
 	                                mesh.geometry.computeVertexNormals();
 	                            } 
+	                            //xzw add:
+	                            tileContent.vertexCount += mesh.geometry.attributes.position.count;
+	                             
+	                            
 	                            
 	                            //------------------add on 2023.1.16----zeg
 	                            
@@ -146740,6 +146766,8 @@ ENDSEC
 	                             
 	                        }
 	                    });
+	                    
+	                    
 	                    resolve(tileContent);
 	                }, 
 	                (e) => {
@@ -153698,10 +153726,10 @@ ENDSEC
 	                options: {
 	                    //dracoDecoderPath: '../utils/loaders/DRACOLoader/draco',
 	                    //basisTranscoderPath: '../utils/loaders/KTX2Loader/basis',
-	                    maximumScreenSpaceError: 700,
-	                    maxDepth: 20,
-	                    showAllTile: true,
-	                    maximumMemoryUsage: 16, //缓存大小
+	                    maximumScreenSpaceError: 100,
+	                    maxDepth: 20, 
+	                    maximumMemoryUsage: 700, //缓存大小。 若太小,密集的tile反复加载很卡
+	                     
 	                },
 	            });
 	            console.log(result);
@@ -153709,7 +153737,7 @@ ENDSEC
 	            loadDone(result.model/* , null, fileInfo.url */);  
 	              
 
-	              
+	               
 	            let loaded = false;
 	            let tileset = result.runtime.getTileset();
 	            tileset.addEventListener('endTileLoading', function (data) {//Tileset3D

Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
public/lib/potree/potree.js.map