|
@@ -2714,11 +2714,11 @@ export class Viewer extends ViewerBase{
|
|
|
let pRenderer = this.getPRenderer();
|
|
|
let viewports = params_.viewports || this.viewports
|
|
|
|
|
|
- if(!this.needRender){
|
|
|
+ /* if(!this.needRender){
|
|
|
viewports = viewports.filter(v=>v.needRender) //可以渲染的条件是viewer或viewport的needRender为true
|
|
|
}
|
|
|
viewports = viewports.filter(v=>v.active)
|
|
|
- if(viewports.length == 0)return
|
|
|
+ if(viewports.length == 0)return */
|
|
|
|
|
|
viewer.addTimeMark('renderDefault','start')
|
|
|
|
|
@@ -3060,13 +3060,23 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
if(vrActive){
|
|
|
this.renderVR();
|
|
|
- }else{
|
|
|
- if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot){
|
|
|
- let scenes = this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud)
|
|
|
- this.composer.render(scenes, null, this.viewports, this.renderDefault.bind(this));
|
|
|
- }else{
|
|
|
- this.renderDefault(params);
|
|
|
- }
|
|
|
+ }else{
|
|
|
+ let viewports = params.viewports || this.viewports
|
|
|
+
|
|
|
+ if(!this.needRender){
|
|
|
+ viewports = viewports.filter(v=>v.needRender) //可以渲染的条件是viewer或viewport的needRender为true
|
|
|
+ }
|
|
|
+ viewports = viewports.filter(v=>v.active)
|
|
|
+ if(viewports.length > 0){
|
|
|
+ params.viewports = viewports
|
|
|
+
|
|
|
+ if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot){
|
|
|
+ let scenes = this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud)
|
|
|
+ this.composer.render(scenes, null, this.viewports, this.renderDefault.bind(this));
|
|
|
+ }else{
|
|
|
+ this.renderDefault(params);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
viewer.addTimeMark('render','end')
|
|
|
}
|
|
@@ -4253,17 +4263,56 @@ export class Viewer extends ViewerBase{
|
|
|
/* if(!Potree.settings.boundAddObjs){
|
|
|
boundingBox.min.set(-0.5,-0.5,-0.5); boundingBox.max.set(0.5,0.5,0.5)
|
|
|
} */
|
|
|
- let fileType = fileInfo.tilesUrl ? '3dTiles' : fileInfo.objurl ? 'obj' : 'glb'
|
|
|
- let loadDone = (object, total, url)=>{
|
|
|
+ if(fileInfo.objurl){
|
|
|
+ fileInfo.url = fileInfo.objurl, fileInfo.fileType = 'obj' //兼容最早的
|
|
|
+ }
|
|
|
+ if(fileInfo.url instanceof Array){
|
|
|
+ if(fileInfo.url.length == 1){
|
|
|
+ fileInfo.url = fileInfo.url[0]
|
|
|
+ }else{
|
|
|
+ fileInfo.loadedCount = 0
|
|
|
+ fileInfo.modelGroup = new THREE.Object3D; //parentGroup.name = fileInfo.title
|
|
|
+ fileInfo.url.forEach((url,i)=>{
|
|
|
+ let fileInfoS = Common.CloneObject(fileInfo)
|
|
|
+ fileInfoS.url = url
|
|
|
+ fileInfoS.name = 'child-'+i
|
|
|
+ fileInfoS.parentInfo = fileInfo
|
|
|
+ this.loadModel(fileInfoS, done, onProgress_, onError)
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //let fileType = fileInfo.tilesUrl ? '3dTiles' : fileInfo.objurl ? 'obj' : 'glb'
|
|
|
+
|
|
|
+
|
|
|
+ let loadDone = (object, fileInfo_ /* , total, url */)=>{
|
|
|
+ /* let weight = Math.round((total / 1024 / 1024) * 100) / 100;
|
|
|
+ url && console.log(url.split('/').pop() , '加载完毕, 模型数据量:' + weight + 'M')
|
|
|
+ */
|
|
|
+ fileInfo_ = fileInfo_ || fileInfo
|
|
|
+ if(fileInfo_.parentInfo){
|
|
|
+ object.name = fileInfo_.name
|
|
|
+ fileInfo_.parentInfo.loadedCount ++
|
|
|
+ fileInfo_.parentInfo.modelGroup.add(object)
|
|
|
+ if(fileInfo_.parentInfo.loadedCount == fileInfo_.parentInfo.url.length){
|
|
|
+ return loadDone(fileInfo_.parentInfo.modelGroup, fileInfo_.parentInfo)
|
|
|
+ }else{
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ object.name = fileInfo_.name != void 0 ? fileInfo_.name : fileInfo_.type
|
|
|
+ object.boundingBox = boundingBox //未乘上matrixWorld的本地boundingBox
|
|
|
//object.scale.set(1,1,1);//先获取原始的大小时的boundingBox
|
|
|
object.opacity = 1 //初始化 记录
|
|
|
object.updateMatrixWorld()
|
|
|
- let weight = Math.round((total / 1024 / 1024) * 100) / 100;
|
|
|
- if(fileInfo.id != void 0)object.dataset_id = fileInfo.id
|
|
|
|
|
|
- console.log(url.split('/').pop() ,/* fileInfo.id, */ '加载完毕, 模型数据量:' + weight + 'M')
|
|
|
+ if(fileInfo_.id != void 0)object.dataset_id = fileInfo_.id
|
|
|
+
|
|
|
|
|
|
- if(fileType == '3dTiles'){
|
|
|
+ if(fileInfo_.fileType == '3dTiles'){
|
|
|
let tileset = object.runtime.getTileset()
|
|
|
|
|
|
//TileHeader: tileset.root
|
|
@@ -4326,15 +4375,13 @@ export class Viewer extends ViewerBase{
|
|
|
}
|
|
|
}
|
|
|
} );
|
|
|
- }
|
|
|
-
|
|
|
- object.name = fileInfo.name != void 0 ? fileInfo.name : 'obj'
|
|
|
+ }
|
|
|
this.objs.add(object)
|
|
|
- object.boundingBox = boundingBox //未乘上matrixWorld的本地boundingBox
|
|
|
|
|
|
- if(fileInfo.transform){
|
|
|
+
|
|
|
+ if(fileInfo_.transform){
|
|
|
let setTransfrom = (name)=>{
|
|
|
- let value = fileInfo.transform[name]
|
|
|
+ let value = fileInfo_.transform[name]
|
|
|
if(!value)return
|
|
|
if(value instanceof Array){
|
|
|
object[name].fromArray(value)
|
|
@@ -4348,7 +4395,7 @@ export class Viewer extends ViewerBase{
|
|
|
}
|
|
|
|
|
|
|
|
|
- if(fileInfo.moveWithPointcloud){
|
|
|
+ if(fileInfo_.moveWithPointcloud){
|
|
|
object.updateMatrix();
|
|
|
object.matrixAutoUpdate = false
|
|
|
object.matrix.premultiply(viewer.scene.pointclouds[0].transformMatrix) //默认跟随第一个数据集
|
|
@@ -4368,27 +4415,26 @@ export class Viewer extends ViewerBase{
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- if(fileType == 'obj'){
|
|
|
+ if(fileInfo.fileType == 'obj'){ //暂时不支持数组
|
|
|
loaders.mtlLoader.load( fileInfo.mtlurl , (materials)=>{
|
|
|
materials.preload();
|
|
|
|
|
|
loaders.objLoader.setMaterials( materials ).load(fileInfo.objurl, (object, total)=>{
|
|
|
- loadDone(object, total, fileInfo.objurl)
|
|
|
+ loadDone(object/* , total, fileInfo.objurl */)
|
|
|
})
|
|
|
} , onProgress, onError );
|
|
|
|
|
|
- }else if(fileType == 'glb'){
|
|
|
+ }else if(fileInfo.fileType == 'glb'){
|
|
|
loaders.glbLoader.unlitMat = true//!!fileInfo.unlit
|
|
|
- loaders.glbLoader.load(fileInfo.glburl, ( gltf, total )=>{ //.setPath( Potree.resourcePath + '/models/glb/' );
|
|
|
+ loaders.glbLoader.load(fileInfo.url, ( gltf, total )=>{
|
|
|
//console.log('loadGLTF', gltf)
|
|
|
- loadDone(gltf.scene, total, fileInfo.glburl)
|
|
|
+ loadDone(gltf.scene/* , total, fileInfo.url */)
|
|
|
}, onProgress, onError)
|
|
|
|
|
|
- }else if(fileType == '3dTiles'){
|
|
|
-
|
|
|
-
|
|
|
+ }else if(fileInfo.fileType == '3dTiles'){
|
|
|
+
|
|
|
let result = await Loader3DTiles.load({
|
|
|
- url: fileInfo.tilesUrl,
|
|
|
+ url: fileInfo.url,
|
|
|
gltfLoader : loaders.glbLoader,
|
|
|
//renderer: SceneRenderer.renderer
|
|
|
options: {
|
|
@@ -4401,7 +4447,7 @@ export class Viewer extends ViewerBase{
|
|
|
})
|
|
|
console.log(result)
|
|
|
result.model.runtime = result.runtime
|
|
|
- loadDone(result.model, null, fileInfo.tilesUrl)
|
|
|
+ loadDone(result.model/* , null, fileInfo.url */)
|
|
|
|
|
|
|
|
|
|