|
@@ -76999,11 +76999,11 @@ void main()
|
|
modelEditing = null;
|
|
modelEditing = null;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
MergeEditor.modelAdded(model);
|
|
MergeEditor.modelAdded(model);
|
|
|
|
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -77040,18 +77040,18 @@ void main()
|
|
viewer.loadModel(info , callback, onProgress, onError);
|
|
viewer.loadModel(info , callback, onProgress, onError);
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
}else if(prop.type == 'osgb' || prop.type == 'b3dm'){ //3d tiles
|
|
}else if(prop.type == 'osgb' || prop.type == 'b3dm'){ //3d tiles
|
|
|
|
|
|
let callback = (object)=>{
|
|
let callback = (object)=>{
|
|
-
|
|
|
|
|
|
+
|
|
object.isModel = true;
|
|
object.isModel = true;
|
|
//透明度怎么办
|
|
//透明度怎么办
|
|
//object.traverse(e=>e.material && (e.material.transparent = true))
|
|
//object.traverse(e=>e.material && (e.material.transparent = true))
|
|
|
|
|
|
loadDone(object);
|
|
loadDone(object);
|
|
- };
|
|
|
|
|
|
+ };
|
|
|
|
|
|
viewer.loadModel({
|
|
viewer.loadModel({
|
|
fileType: '3dTiles',
|
|
fileType: '3dTiles',
|
|
@@ -77325,7 +77325,7 @@ void main()
|
|
cameraHeight : 1000, //最高 ,注意(如sitemodel)其他的物体不能超过这个高度
|
|
cameraHeight : 1000, //最高 ,注意(如sitemodel)其他的物体不能超过这个高度
|
|
},
|
|
},
|
|
minNodeSize:30, // perspectiveCamera允许加载的node的最小可见像素宽度。越大越省性能
|
|
minNodeSize:30, // perspectiveCamera允许加载的node的最小可见像素宽度。越大越省性能
|
|
- tiles3DMaxMemory: 250,//M. 最大支持3dTiles的内存大小 超出会崩溃
|
|
|
|
|
|
+ tiles3DMaxMemory: 100,//M. 最大支持3dTiles的内存大小 超出会崩溃。 改太小太大都会卡,太大崩溃
|
|
pointDensity:{
|
|
pointDensity:{
|
|
magnifier:{
|
|
magnifier:{
|
|
maxLevelPercent: 1,
|
|
maxLevelPercent: 1,
|
|
@@ -135713,7 +135713,7 @@ ENDSEC
|
|
***************************************************************************** */
|
|
***************************************************************************** */
|
|
|
|
|
|
|
|
|
|
- let visiVertexCount = 0;
|
|
|
|
|
|
+
|
|
let visiGeoCount = 0;
|
|
let visiGeoCount = 0;
|
|
const maxVertexVisi = 5e6;
|
|
const maxVertexVisi = 5e6;
|
|
const maxTexVisi = 500;
|
|
const maxTexVisi = 500;
|
|
@@ -135739,7 +135739,7 @@ ENDSEC
|
|
}
|
|
}
|
|
|
|
|
|
viewer.tiles3dMemoryUsage = c;
|
|
viewer.tiles3dMemoryUsage = c;
|
|
- viewer.tiles3dVisiVCount = visiVertexCount;
|
|
|
|
|
|
+
|
|
return c
|
|
return c
|
|
}
|
|
}
|
|
|
|
|
|
@@ -143231,8 +143231,14 @@ ENDSEC
|
|
while (node !== sentinel && ( getGpuMemoryUsage() > maximumMemoryUsageInBytes || trimTiles)) {
|
|
while (node !== sentinel && ( getGpuMemoryUsage() > maximumMemoryUsageInBytes || trimTiles)) {
|
|
const tile = node.item;
|
|
const tile = node.item;
|
|
node = node.next;
|
|
node = node.next;
|
|
- this.unloadTile(tileset, tile, unloadCallback);
|
|
|
|
- }
|
|
|
|
|
|
+ this.unloadTile(tileset, tile, unloadCallback);
|
|
|
|
+ //add: 针对部分特别精细的如 https://4dkk.4dage.com/scene_view_data/SG-t-WReTBN204dQ/images/3dtiles/tileset.json
|
|
|
|
+
|
|
|
|
+ if(viewer.visiVertexCount > 1500000){
|
|
|
|
+ tileset.options.maximumScreenSpaceError *= 1.1;
|
|
|
|
+ tileset.options.maximumScreenSpaceError = Math.min(1000, tileset.options.maximumScreenSpaceError);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -145653,6 +145659,9 @@ ENDSEC
|
|
class Tileset3D extends EventDispatcher{//xzw add EventDispatcher
|
|
class Tileset3D extends EventDispatcher{//xzw add EventDispatcher
|
|
constructor(json, options) {
|
|
constructor(json, options) {
|
|
super();
|
|
super();
|
|
|
|
+
|
|
|
|
+ viewer.visiVertexCount = viewer.visiVertexCount || 0;
|
|
|
|
+
|
|
_defineProperty(this, "options", void 0);
|
|
_defineProperty(this, "options", void 0);
|
|
|
|
|
|
_defineProperty(this, "loadOptions", void 0);
|
|
_defineProperty(this, "loadOptions", void 0);
|
|
@@ -153456,9 +153465,9 @@ ENDSEC
|
|
|
|
|
|
// Make sure it's visible
|
|
// Make sure it's visible
|
|
if(!renderMap[tile.id].visible){
|
|
if(!renderMap[tile.id].visible){
|
|
- if(visiVertexCount<maxVertexVisi){
|
|
|
|
|
|
+ if(viewer.visiVertexCount<maxVertexVisi){
|
|
renderMap[tile.id].visible = true;
|
|
renderMap[tile.id].visible = true;
|
|
- visiVertexCount += renderMap[tile.id].vertexCount; //xzw add
|
|
|
|
|
|
+ viewer.visiVertexCount += renderMap[tile.id].vertexCount; //xzw add
|
|
options.debug && (boxMap[tile.id].material.opacity = 1 , boxMap[tile.id].children[0].sprite.material.opacity = 1 );
|
|
options.debug && (boxMap[tile.id].material.opacity = 1 , boxMap[tile.id].children[0].sprite.material.opacity = 1 );
|
|
}else {
|
|
}else {
|
|
//console.log('超出', visiVertexCount)
|
|
//console.log('超出', visiVertexCount)
|
|
@@ -153476,7 +153485,7 @@ ENDSEC
|
|
renderMap[tile.id].visible = false;
|
|
renderMap[tile.id].visible = false;
|
|
options.debug && (boxMap[tile.id].material.opacity = 0.1, boxMap[tile.id].children[0].sprite.material.opacity = 0.1);
|
|
options.debug && (boxMap[tile.id].material.opacity = 0.1, boxMap[tile.id].children[0].sprite.material.opacity = 0.1);
|
|
|
|
|
|
- visiVertexCount -= renderMap[tile.id].vertexCount; //xzw add
|
|
|
|
|
|
+ viewer.visiVertexCount -= renderMap[tile.id].vertexCount; //xzw add
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -164464,17 +164473,17 @@ ENDSEC
|
|
});
|
|
});
|
|
|
|
|
|
}else if(fileInfo.fileType == '3dTiles'){
|
|
}else if(fileInfo.fileType == '3dTiles'){
|
|
-
|
|
|
|
|
|
+
|
|
let result = await Loader3DTiles.load({
|
|
let result = await Loader3DTiles.load({
|
|
url: fileInfo.url,
|
|
url: fileInfo.url,
|
|
gltfLoader : loaders.glbLoader,
|
|
gltfLoader : loaders.glbLoader,
|
|
//renderer: SceneRenderer.renderer
|
|
//renderer: SceneRenderer.renderer
|
|
- options: {
|
|
|
|
|
|
+ options: {
|
|
//dracoDecoderPath: '../utils/loaders/DRACOLoader/draco',
|
|
//dracoDecoderPath: '../utils/loaders/DRACOLoader/draco',
|
|
//basisTranscoderPath: '../utils/loaders/KTX2Loader/basis',
|
|
//basisTranscoderPath: '../utils/loaders/KTX2Loader/basis',
|
|
maximumScreenSpaceError: fileInfo.maximumScreenSpaceError || 80, //越小越清晰。 如果本身tiles很密很小这个值就不能很大。
|
|
maximumScreenSpaceError: fileInfo.maximumScreenSpaceError || 80, //越小越清晰。 如果本身tiles很密很小这个值就不能很大。
|
|
//maxDepth: 100,
|
|
//maxDepth: 100,
|
|
- maximumMemoryUsage: 200, //缓存大小。单位M(但实际结果是 2.5*maximumMemoryUsage + 750 。超过2G会崩, 所以应该小于540) 若太小,密集的tile反复加载很卡. (任务管理器刷新网页后若内存不掉就要结束进程否则虚高)
|
|
|
|
|
|
+ //maximumMemoryUsage: 100, //缓存大小,见tiles3DMaxMemory。单位M(但实际结果是 2.5*maximumMemoryUsage + 750 。超过2G会崩, 所以应该小于540) 若太小,密集的tile反复加载很卡. (任务管理器刷新网页后若内存不掉就要结束进程否则虚高)
|
|
debug: browser.urlHasValue('tilesBox'), //show box
|
|
debug: browser.urlHasValue('tilesBox'), //show box
|
|
parent: this.scene.scene,
|
|
parent: this.scene.scene,
|
|
is4dkk: fileInfo.is4dkk,//是否是4dkk中的模型. 通常maximumScreenSpaceError需要10
|
|
is4dkk: fileInfo.is4dkk,//是否是4dkk中的模型. 通常maximumScreenSpaceError需要10
|