|
@@ -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) {}
|
|
|
}
|
|
|
});
|
|
|
}
|