jinx 1 year ago
parent
commit
9b54c3f9e6
3 changed files with 60 additions and 30 deletions
  1. 1 1
      public/js/smart.js
  2. 58 28
      public/static/lib/potree/potree.js
  3. 1 1
      public/static/lib/potree/potree.js.map

File diff suppressed because it is too large
+ 1 - 1
public/js/smart.js


+ 58 - 28
public/static/lib/potree/potree.js

@@ -4601,6 +4601,8 @@
 
 	    urlNew = this.replaceAll(urlNew, "/.//", "/"); //去除双斜杠(/.//)
 
+	    //urlNew = encodeURIComponent(url)
+
 	    return urlNew;
 	  },
 	  getNameFromURL(url) {
@@ -25153,15 +25155,23 @@
 	        }
 	        allElements = this.getHoveredElements(viewer.objs.children, true, raycaster);
 	        if (allElements[0]) {
-	          var quaternion = new Quaternion();
-	          var nor = allElements[0].face && allElements[0].face.normal;
-	          nor && allElements[0].oriObject.matrixWorld.decompose(new Vector3(), quaternion, new Vector3());
+	          var normal;
+	          if (allElements[0].object.fileType == '3dgs') {
+	            normal = allElements[0].normal;
+	          } else {
+	            var nor = allElements[0].face && allElements[0].face.normal;
+	            if (nor) {
+	              var quaternion = new Quaternion();
+	              allElements[0].oriObject.matrixWorld.decompose(new Vector3(), quaternion, new Vector3());
+	              normal = nor.applyQuaternion(quaternion);
+	            }
+	          }
 	          intersectOnModel = {
 	            //模拟点云的intersectPoint的结构写法
 	            hoveredElement: allElements[0],
 	            location: allElements[0].point,
 	            //point: {normal: allElements[0].face.normal },
-	            normal: nor && nor.applyQuaternion(quaternion),
+	            normal,
 	            distance: allElements[0].distance,
 	            object: allElements[0].object
 	          };
@@ -36123,10 +36133,11 @@
 	          this.temp.sizeFitToLevel[str] = size;
 	        }
 	      } else {
-	        /* let base = 0.007; */var _base = this.material.spacing / Math.pow(2, nodeMaxLevel); //点云大小在level为0时设置为spacing,每长一级,大小就除以2
+	        var _base = 0.015; //2024.8.21 又要求需要不同场景点云大小相同,所以只能固定值了  (正式环境这两个场景 SG-5yxFuWhEMlg SG-XZNyvCDk0jz)
+	        //let base = this.material.spacing / Math.pow(2,  nodeMaxLevel) //在保证最高级别大小刚好的情况下,不改变level降低后的大小
 	        //base的数值理论上应该是右侧算出来的,但发现有的场景nodeMaxLevel和nodeMaxLevelPredict差别较大的点云显示也过大,而直接换成固定值反而可以适应所有场景。该固定值来源于 getHighestNodeSpacing 最小值,修改了下。(会不会是我们的相机其实该值是固定的,根据该值算出的spacing才是有误差的? 如果换了相机是否要改值?)
 	        //2022-12-21又换回非固定值。因为有的场景如SS-t-t01myDqnfE的两个数据集密集程度差别很大,应该将稀疏点云的大小设置的大些。 但是这样的缺点是两个数据集因相接处有大有小无法融合。
-	        size = _base * 20 * num_; /* * window.devicePixelRatio  */
+	        size = _base * 20 * num_;
 	      }
 	    }
 	    //console.log('changePointSize:'  + this.dataset_id + ' , num: ' + (num && num.toPrecision(3)) + ' , size: ' + size.toPrecision(3),  'nodeMaxLevel', nodeMaxLevel.toPrecision(3), 'testMaxNodeCount',this.testMaxNodeCount     /* this.material.spacing */)
@@ -58664,7 +58675,7 @@
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials; //xzw change
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0]; //xzw change
 
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
@@ -58689,13 +58700,13 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials;
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex]; //曾因这里报错加了一句  || parser.json.materials; 但是加载的图会先变白
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0]; //曾因这里报错加了一句  || parser.json.materials; 但是加载的图会先变白
 
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
@@ -58737,13 +58748,14 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
 	    }
@@ -58786,13 +58798,15 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
 	    }
@@ -58830,13 +58844,15 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
 	    }
@@ -58864,7 +58880,8 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
@@ -58899,7 +58916,8 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
@@ -58927,13 +58945,15 @@
 	  }
 	  getMaterialType(materialIndex) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;
 	    return MeshPhysicalMaterial;
 	  }
 	  extendMaterialParams(materialIndex, materialParams) {
 	    var parser = this.parser;
-	    var materialDef = parser.json.materials[materialIndex];
+	    var materialDef = parser.json.materials[materialIndex] || parser.json.materials[0];
+	    ;
 	    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
 	      return Promise.resolve();
 	    }
@@ -60449,6 +60469,10 @@
 	    var json = this.json;
 	    var extensions = this.extensions;
 	    var materialDef = json.materials[materialIndex];
+	    if (!materialDef) {
+	      console.error('gltf材质数据有问题, 可能引起一些列错误'); //add
+	      materialDef = json.materials[0] || {};
+	    }
 	    var materialType;
 	    var materialParams = {};
 	    var materialExtensions = materialDef.extensions || {};
@@ -77004,7 +77028,7 @@
 	    this.boxHelper.quaternion.copy(model.quaternion);
 	  },
 	  showModelOutline(model, state) {
-	    if (Potree.settings.mergeType2) {
+	    if (Potree.settings.mergeType2 || model ? model.fileType == '3dgs' : this.boxHelper.visible) {
 	      //高斯很卡
 	      if (state !== false) {
 	        this.updateBoxHelper(model);
@@ -91263,13 +91287,8 @@
 	        '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 = () => {
 	          loadDone(gsViewer.splatMesh);
 	          var {
@@ -91279,6 +91298,19 @@
 	          gsViewer.splatMesh.boundingBox.min.copy(sceneMin);
 	          gsViewer.splatMesh.boundingBox.max.copy(sceneMax);
 	        };
+	        var selfRaycaster = new Raycaster$1();
+	        gsViewer.splatMesh.raycast = function (raycaster, intersects) {
+	          //重写
+	          var hits = [];
+	          selfRaycaster.ray.setParameters(raycaster.ray.origin, raycaster.ray.direction);
+	          selfRaycaster.intersectSplatMesh(gsViewer.splatMesh, hits);
+	          hits.forEach(e => {
+	            e.object = gsViewer.splatMesh;
+	            e.point = e.origin;
+	            delete e.origin;
+	          });
+	          intersects.push(...hits);
+	        }; //问题:感觉normal不准
 	      });
 
 	      //window.gsViewer = gsViewer
@@ -91287,9 +91319,7 @@
 	        if (e.name == 'scene') {
 	          //gsViewer.selfDrivenUpdate()
 	          gsViewer.update();
-	          if (gsViewer.initialized && gsViewer.splatRenderReady) {
-	            gsViewer.splatMesh.visible = true;
-	          }
+	          if (gsViewer.initialized && gsViewer.splatRenderReady) {}
 	        }
 	      });
 	    }

File diff suppressed because it is too large
+ 1 - 1
public/static/lib/potree/potree.js.map