xzw hai 1 mes
pai
achega
7b89d34ae1

+ 28 - 13
examples/splatter.html

@@ -208,7 +208,7 @@
     if(splatId!=''){
     if(splatId!=''){
         let path = browser.urlHasValue('gsPath', true) 
         let path = browser.urlHasValue('gsPath', true) 
         if(path){
         if(path){
-            path = Potree.Common.replaceAll(path,'{splatId}',splatId)
+            path = Potree.Common.replaceAll(path,'+splatId+',splatId)
         }else{ 
         }else{ 
             if(urlAtSplatter){
             if(urlAtSplatter){
                 path = Potree.resourcePath + '../../../../examples/tomcat/splatter.app/data/' + splatId  
                 path = Potree.resourcePath + '../../../../examples/tomcat/splatter.app/data/' + splatId  
@@ -234,27 +234,27 @@
         
         
             applyConfig(config)
             applyConfig(config)
             
             
-            let btn1 = document.querySelector('#potree_render_area [value=">>全景"]')
+            let btn1 = document.querySelector('#potree_render_area button[index="1"]')
             btn1.style.right = '27%'
             btn1.style.right = '27%'
             /*btn1.value = '停lod'
             /*btn1.value = '停lod'
             btn1.onclick = ()=>{ 
             btn1.onclick = ()=>{ 
                 btn1.value = btn1.value == '停lod' ? '开lod' : '停lod' 
                 btn1.value = btn1.value == '停lod' ? '开lod' : '停lod' 
                 viewer.splatter.renderer.lodder.pauseLod = btn1.value == '停lod' ? 0 : 1
                 viewer.splatter.renderer.lodder.pauseLod = btn1.value == '停lod' ? 0 : 1
             }*/
             }*/
-            btn1.value = '停碰撞'
+            btn1.innerText = '停碰撞'
             btn1.onclick = ()=>{ 
             btn1.onclick = ()=>{ 
-                btn1.value = btn1.value == '停碰撞' ? '开碰撞' : '停碰撞' 
-                window.stopColl = btn1.value == '停碰撞' ? 0 : 1 
+                btn1.innerText = btn1.innerText == '停碰撞' ? '开碰撞' : '停碰撞' 
+                window.stopColl = btn1.innerText == '停碰撞' ? 0 : 1 
             }
             }
              
              
             
             
-            let btn2 = document.querySelector('#potree_render_area [value="隐藏点云"]')
+            let btn2 = document.querySelector('#potree_render_area button[index="0"]')
             /*btn2.value = '停sort' 
             /*btn2.value = '停sort' 
             btn2.onclick = ()=>{
             btn2.onclick = ()=>{
                 btn2.value = btn2.value == '停sort' ? '开sort' : '停sort' 
                 btn2.value = btn2.value == '停sort' ? '开sort' : '停sort' 
                 viewer.splatter.renderer.lodder.pauseSort = btn2.value == '停sort' ? 0 : 1
                 viewer.splatter.renderer.lodder.pauseSort = btn2.value == '停sort' ? 0 : 1
             }*/
             }*/
-            btn2.value = 'toggleMesh' 
+            btn2.innerText = 'toggleMesh' 
             btn2.onclick = ()=>{ 
             btn2.onclick = ()=>{ 
                 viewer.collider.toggleMesh()
                 viewer.collider.toggleMesh()
             }
             }
@@ -262,24 +262,39 @@
             browser.urlHasValue('character') && viewer.setControls(viewer.characterCtrl)
             browser.urlHasValue('character') && viewer.setControls(viewer.characterCtrl)
          
          
          
          
-            let modeBtn = document.createElement('input')
+            let modeBtn = document.createElement('button')
             btn2.parentElement.appendChild(modeBtn) 
             btn2.parentElement.appendChild(modeBtn) 
             modeBtn.style.width = '60px'
             modeBtn.style.width = '60px'
             modeBtn.style.right = '5px' 
             modeBtn.style.right = '5px' 
             modeBtn.style.top = '5px' 
             modeBtn.style.top = '5px' 
             modeBtn.style['z-index'] = 10000;
             modeBtn.style['z-index'] = 10000;
             modeBtn.style['position'] = 'absolute';
             modeBtn.style['position'] = 'absolute';
-            modeBtn.value = '枢轴模式'
+            modeBtn.innerText = '枢轴模式'
             let firstControl = viewer.controls
             let firstControl = viewer.controls
             viewer.orbitControls.constantlyForward = true
             viewer.orbitControls.constantlyForward = true
             viewer.orbitControls.progression = true
             viewer.orbitControls.progression = true
-            modeBtn.onclick = ()=>{ 
-                modeBtn.value = modeBtn.value == '枢轴模式' ? '第一人称' : '枢轴模式' 
-                viewer.setControls(modeBtn.value == '枢轴模式' ? firstControl : viewer.orbitControls)
+            let cur = 0
+            let modes = [
+                {name:'第一人称', control: viewer.fpControls}, 
+                {name:'枢轴模式', control: viewer.orbitControls}, 
+                {name:'数字人', control: viewer.characterCtrl}, 
+            ]
+            
+            let setMode = (num)=>{
+                cur = num
+                viewer.setControls(modes[num].control)
+                modeBtn.innerText = modes[num].name 
                 viewer.mainViewport.view.radius = 10 //for orbit
                 viewer.mainViewport.view.radius = 10 //for orbit
             }
             }
+             
+            modeBtn.onclick = ()=>{ 
+                cur ++
+                cur %= modes.length 
+                setMode(cur) 
+            }
+            browser.urlHasValue('character') && setMode(2)//viewer.setControls(viewer.characterCtrl)
             
             
-            
+           
             
             
         })
         })
         
         

+ 14 - 9
src/custom/modules/clipModel/Clip.js

@@ -67,33 +67,38 @@ var Clip = {
         this.initViews()
         this.initViews()
          
          
         this.previousView = { 
         this.previousView = { 
-			position: viewer.images360.position,
+			position: viewer.scene.view.position.clone(),
 			target: viewer.scene.view.getPivot(),
 			target: viewer.scene.view.getPivot(),
             displayMode : Potree.settings.displayMode,
             displayMode : Potree.settings.displayMode,
             //---
             //---
             ifShowMarker : Potree.settings.ifShowMarker,
             ifShowMarker : Potree.settings.ifShowMarker,
-            
+            duration:300,
 		} 
 		} 
 
 
         let pointcloud = this.getPointcloud() 
         let pointcloud = this.getPointcloud() 
         let bound = pointcloud.bound //只选取其中一个数据集的bound,而非整体,是因为担心两个数据集中间有空隙,于是刚好落在没有点云的地方。
         let bound = pointcloud.bound //只选取其中一个数据集的bound,而非整体,是因为担心两个数据集中间有空隙,于是刚好落在没有点云的地方。
-        let boundSize = bound.getSize(new THREE.Vector3())
+        /* let boundSize = bound.getSize(new THREE.Vector3())
         let target = this.getTarget(bound.getCenter(new THREE.Vector3())); //navvis的位置xy是用相机位置 this.ViewService.mainView.getCamera().position  我觉得也可以用第一个漫游点的,或者最接近bound中心的漫游点
         let target = this.getTarget(bound.getCenter(new THREE.Vector3())); //navvis的位置xy是用相机位置 this.ViewService.mainView.getCamera().position  我觉得也可以用第一个漫游点的,或者最接近bound中心的漫游点
         let scale = new THREE.Vector3(defaultBoxWidth,defaultBoxWidth, boundSize.z)//z和navvis一样
         let scale = new THREE.Vector3(defaultBoxWidth,defaultBoxWidth, boundSize.z)//z和navvis一样
-        
-        let eyeDir = viewer.scene.view.direction.clone().setZ(0/* -boundSize.z/3 */).multiplyScalar(-defaultBoxWidth)  //为了使所在楼层不变,不修改z
+         */
+        let target = viewer.bound.center
+        let scale = viewer.bound.boundSize 
+        //let eyeDir = viewer.scene.view.direction.clone().setZ(0/* -boundSize.z/3 */).multiplyScalar(-defaultBoxWidth)  //为了使所在楼层不变,不修改z
 
 
-        //let eyeDir = scale.clone().setZ(boundSize.z/3).multiplyScalar(1.3) 
-        let position = new THREE.Vector3().addVectors(target, eyeDir)
+         
+       // let position = new THREE.Vector3().addVectors(target, eyeDir)
         
         
         Potree.settings.displayMode = 'showPointCloud'
         Potree.settings.displayMode = 'showPointCloud'
-        viewer.setView({
+        /* viewer.setView({
             position ,
             position ,
             target,
             target,
             duration:300,
             duration:300,
             callback:function(){ 
             callback:function(){ 
             }
             }
-        })
+        }) */
+        let eyeDir = viewer.scene.view.direction.clone().setZ(-0.9)
+        viewer.focusOnObject({boundingBox:viewer.bound.boundingBox},'boundingBox', 300, {dir:eyeDir}) 
+        
         //viewer.setControls(viewer.orbitControls);
         //viewer.setControls(viewer.orbitControls);
         viewer.setLimitFar(false) 
         viewer.setLimitFar(false) 
         //viewer.setClipState(false) //暂时关闭旧的clipping
         //viewer.setClipState(false) //暂时关闭旧的clipping

+ 1 - 1
src/custom/modules/mergeModel/MergeEditor.js

@@ -497,7 +497,7 @@ let MergeEditor = {
         if(this.selected == model) this.selectModel(null)
         if(this.selected == model) this.selectModel(null)
         let dispose = (e)=>{
         let dispose = (e)=>{
             e.geometry && e.geometry.dispose() 
             e.geometry && e.geometry.dispose() 
-            e.material && e.material.dispose()
+            e.dealMaterial(a=>a.dispose())    
         }
         }
         if(model.isPointcloud){
         if(model.isPointcloud){
             dispose(model)
             dispose(model)

+ 1 - 1
src/custom/objects/3dgs/splatter/SplatterThree.js

@@ -1961,7 +1961,7 @@ void main(){
  
  
 
 
 
 
-var chunkSize = /* 5e5// */2e6;
+var chunkSize = 2e6// 5e5 
 class Renderer {
 class Renderer {
     constructor(gl, g, splatter, C={}) {
     constructor(gl, g, splatter, C={}) {
         this.splatter = splatter //add
         this.splatter = splatter //add

+ 1 - 1
src/custom/start.js

@@ -23,7 +23,7 @@ var transformPointcloud = (pointcloud, dataset)=>{
      
      
     viewer.sidebar && viewer.sidebar.addAlignmentButton(pointcloud) 
     viewer.sidebar && viewer.sidebar.addAlignmentButton(pointcloud) 
     
     
-    //dataset.orientation = 0
+    //dataset.orientation = 1
     let Alignment = viewer.modules.Alignment
     let Alignment = viewer.modules.Alignment
     Alignment.rotate(pointcloud, null, dataset.quaternion?.length == 4 ? dataset.quaternion : dataset.orientation)
     Alignment.rotate(pointcloud, null, dataset.quaternion?.length == 4 ? dataset.quaternion : dataset.orientation)
     Alignment.translate(pointcloud, new THREE.Vector3(location[0], location[1],  dataset.location[2]-baseZ)) //要使初始数据集的z为0,所以要减去初始数据集的z
     Alignment.translate(pointcloud, new THREE.Vector3(location[0], location[1],  dataset.location[2]-baseZ)) //要使初始数据集的z为0,所以要减去初始数据集的z

+ 24 - 5
src/custom/viewer/ViewerNew.js

@@ -549,6 +549,24 @@ export class Viewer extends ViewerBase{
                 outlinePass.visibleEdgeColor = new THREE.Color("#09a1b3")   
                 outlinePass.visibleEdgeColor = new THREE.Color("#09a1b3")   
                  
                  
                  
                  
+                 //--------------
+                 
+                /* const renderPass = new RenderPass(); 
+				//renderPass.clearColor = new THREE.Color( 0,0,0 );      
+				//renderPass.clearAlpha = 0; 
+                renderPass.clear = !this.composer.readTarget 
+                this.composer.addPass( renderPass );   
+                 
+                this.fxaaPass = new ShaderPass( FXAAShader );  
+                this.fxaaPass.readTarget = true //add 
+                this.fxaaPass.setSize = function(width, height){
+                    this.material.uniforms[ 'resolution' ].value.x = 1 / ( width )  ;
+                    this.material.uniforms[ 'resolution' ].value.y = 1 / ( height )  ;  
+                } 
+                this.fxaaPass.renderToScreen = true;
+                this.composer.addPass( this.fxaaPass ); */
+                //-----------------------
+                
                 
                 
                 /* this.fxaaPass = new ShaderPass( FXAAShader );  
                 /* this.fxaaPass = new ShaderPass( FXAAShader );  
                 this.fxaaPass.readTarget = true //add 
                 this.fxaaPass.readTarget = true //add 
@@ -3830,18 +3848,19 @@ export class Viewer extends ViewerBase{
             }
             }
             viewports = viewports.filter(v=>v.active) 
             viewports = viewports.filter(v=>v.active) 
             if(viewports.length > 0){   
             if(viewports.length > 0){   
-                 
+                
                 params.viewports = viewports  
                 params.viewports = viewports  
                 if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot 
                 if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot 
                    // || this.images360.fastTranMaskPass.enabled
                    // || this.images360.fastTranMaskPass.enabled
                 ){  
                 ){  
                     let scenes = this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud) 
                     let scenes = this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud) 
                     this.composer.render(scenes, null, this.viewports, this.renderDefault.bind(this));  
                     this.composer.render(scenes, null, this.viewports, this.renderDefault.bind(this));  
+                    //this.composer.render(this.scene, this.mainViewport.camera, this.viewports, this.renderDefault.bind(this));  
+              
                 }else{  
                 }else{  
                     await this.renderDefault(params);
                     await this.renderDefault(params);
-                }
-                
-              
+                }  
+               
                 {
                 {
                     let marks = performance.getEntriesByName("loop-start")
                     let marks = performance.getEntriesByName("loop-start")
                     marks.length && (marks[marks.length-1].rendered = true )
                     marks.length && (marks[marks.length-1].rendered = true )
@@ -6188,7 +6207,7 @@ export class Viewer extends ViewerBase{
         model.parent.remove(model)
         model.parent.remove(model)
         let dispose = (e)=>{
         let dispose = (e)=>{
             e.geometry && e.geometry.dispose() 
             e.geometry && e.geometry.dispose() 
-            e.material && e.material.dispose()
+            e.dealMaterial(a=>a.dispose())  
         } 
         } 
         model.traverse(e=>{
         model.traverse(e=>{
             dispose(e) 
             dispose(e) 

+ 1 - 1
src/utils/TransformationToolNew.js

@@ -1015,7 +1015,7 @@ export class TransformationTool extends THREE.EventDispatcher{
 			}
 			}
 		}
 		}
         
         
-        this.dropHandle(e)
+         
         
         
 	}
 	}
  
  

+ 1 - 1
src/utils/VolumeNew.js

@@ -35,7 +35,7 @@ export class Volume extends THREE.Object3D {
 		this._modifiable = args.modifiable || true;
 		this._modifiable = args.modifiable || true;
 
 
 	 
 	 
-		{ // event listeners
+		if(!args.noInteract){ // event listeners
 			this.addEventListener('select', e => {
 			this.addEventListener('select', e => {
                 //console.log('select')
                 //console.log('select')
                 this.setSelected(true)   
                 this.setSelected(true)   

+ 6 - 2
src/viewer/ExtendScene.js

@@ -217,8 +217,12 @@ class ExtendScene extends Scene{
         Potree.Utils.setCameraLayers(o.camera, ['sceneObjects'])
         Potree.Utils.setCameraLayers(o.camera, ['sceneObjects'])
 		 
 		 
         viewer.dispatchEvent({type: "render.begin2" , name:'overlays', viewport:o.viewport, renderer:o.renderer  })
         viewer.dispatchEvent({type: "render.begin2" , name:'overlays', viewport:o.viewport, renderer:o.renderer  })
-        renderer.render(this.overlayScene, o.camera );
-       
+        /* if(o.screenshot && viewer.fxaaPass.enabled){ //抗锯齿
+            viewer.ssaaRenderPass.sampleLevel = 4
+            viewer.composer.render(this.overlayScene, o.camera );  
+        }else{ */ 
+            renderer.render(this.overlayScene, o.camera );
+        //}
 	}
 	}
     
     
     
     

+ 10 - 1
src/viewer/ExtendView.js

@@ -495,9 +495,18 @@ class ExtendView extends View {
     applyJson(json){
     applyJson(json){
         typeof json == 'string' &&  (json = JSON.parse(json))
         typeof json == 'string' &&  (json = JSON.parse(json))
         this.position.copy(json.position)
         this.position.copy(json.position)
-        this.yaw = json.yaw,  this.pitch = json.pitch, this.radius = json.radius
+      
+        this.yaw = json.yaw,  this.pitch = json.pitch, this.radius = json.radius ?? this.radius
     }
     }
      
      
+    /* set radius(r){
+        //if(r == void 0 )debugger
+        this.radius_ = r
+    } 
+    
+    get radius(){
+        return this.radius_
+    } */
 
 
 };
 };