فهرست منبع

fix: 带坐标3dtiles研究完毕

xzw 7 ماه پیش
والد
کامیت
b74538b677

+ 36 - 4
libs/three.js/3dtiles/three-loader-3dtiles.esm.js

@@ -9780,11 +9780,25 @@ class TileHeader {
                 }
             }
           
-            if(!rtcCenter) {
+          
+          
+          //rtcCenter = !rtcCenter
+          
+           /* let tranM = new Matrix4$1()  
+           
+           
+           if(!rtcCenter) { 
+            tranM.makeScale( 1,-1,1) 
+        }else{
+            tranM.makeScale( 1,-1,-1) 
+        }
+          this.contentTransform.premultiply(tranM)  */
+            if(!rtcCenter) { 
                 let tranM = new Matrix4$1()  
-                tranM.makeScale(1,1,-1)//大部分是这种情况.  就是因为这个变换才加的这个函数,之前bounding没考虑这个不准。不知道为什么原生的代码不用scaleZ
+                //tranM.makeScale( 1,-1,1) 
+                tranM.makeScale(1, 1,-1)//大部分是这种情况.  就是因为这个变换才加的这个函数,之前bounding没考虑这个不准。不知道为什么原生的代码不用scaleZ
                 this.contentTransform.premultiply(tranM) 
-            } 
+            }  
             //如果有rtcCenter的话一开始boundingVolume不准?会不会有显示问题?
         }
         return this.contentTransform.clone()
@@ -18404,10 +18418,28 @@ model.position.copy(pos)
 
  
 
-cesium显示:http://192.168.0.59:1234/examples/tomcat/allTest/Cesium-3dTiles/index.html
+cesium显示:http://192.168.0.59:1234/examples/tomcat/allTest/Cesium-3dTiles/index-sphere.html
 tile.header.boundingVolume.sphere 应用上变换才是 tile.boundingVolume.center 
+-.-.-.-.--.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
+
+用另一个开源代码转的是box型的,这样对准位置:
+let center = new THREE.Vector3().fromArray([-2361896.965580558 ,//json的transform的后面三位
+5407880.606769544 ,
+2412064.492022378
+])
+let pos = Potree.sdk.cesMath.fromCes(center)  
+viewer.modules.MergeEditor.selected.position.copy(pos) 
+//let lonlat = Potree.sdk.cesMath.fromCes(center,true) 
+//let pos = viewer.transform.lonlatToLocal.forward(lonlat) 
+  
+//viewer.modules.MergeEditor.moveBoundCenterTo( viewer.modules.MergeEditor.selected, new THREE.Vector3().fromArray(pos) )  
+//因为bound中心在原点所以上面两句都可以
 
 
+viewer.modules.MergeEditor.selected.updateMatrixWorld()
+viewer.modules.MergeEditor.getBoundCenter(viewer.modules.MergeEditor.selected)
+
+ 
 ==============
 
 3dtiles在四维看看和激光里摆放不同,这里的需要位移一段距离才能和四维看看一样,也就是和无transform后的点云一样。

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

@@ -247,8 +247,8 @@ let MergeEditor = {
         {//校准页面拖拽
             //左右屏都可以拖拽模型,旋转只能左屏
             let dragInfo  
-            let drag = (e)=>{ 
-                if(this.split &&  this.selected && this.transformState && (e.dragViewport.name == 'top' || this.transformState == 'translate')   ){ 
+            let drag = (e)=>{  
+                if(this.split &&  this.selected && this.transformState && (e.dragViewport.name == 'top' || this.transformState == 'translate') && e.buttons == Potree.defines.Buttons.LEFT   ){ 
                     if(e.type == 'global_mousedown' ){ //开始
                         //if((e.intersect.object || e.intersect.pointcloud) == this.selected){
                         if(e.intersect.pointclouds.includes(this.selected) || e.intersect.allElements.some(e=>e.object == this.selected)){

+ 2 - 2
src/custom/objects/tool/TransformControls.js

@@ -129,8 +129,8 @@ var TransformControls = function ( camera, domElement, options ) {
 		domElement.addEventListener( "touchcancel", onPointerUp, false );
 		domElement.addEventListener( "touchleave", onPointerUp, false );
 
-        let drag = (e)=>{
-            if(this.dragging && e.button == 0){
+        let drag = (e)=>{ 
+            if(this.dragging && e.buttons == Potree.defines.Buttons.LEFT ){
                 this.pointerMove() 
                 return {stopContinue:true}
             }

+ 6 - 6
src/custom/viewer/ViewerNew.js

@@ -588,21 +588,21 @@ export class Viewer extends ViewerBase{
                 this.navigationCube.visible = false;
 
                 
-                
+                 
                  
                 
                 this.createControls();
 
                 this.clippingTool.setScene(this.scene);
-                
+                     
                 let onPointcloudAdded = (e) => {
                     if (this.scene.pointclouds.length === 1) {
                         let speed = e.pointcloud.boundingBox.getSize(new THREE.Vector3()).length();
                         speed = speed / 2000;
                         this.setMoveSpeed(speed);
                     }
-                };
-
+                }; 
+ 
                 let onVolumeRemoved = (e) => {
                     this.inputHandler.deselect(e.volume);
                 };
@@ -5984,7 +5984,7 @@ export class Viewer extends ViewerBase{
             })
              
         }else if(fileInfo.fileType == '3dTiles'){ 
-                        
+                         
             let result = await Loader3DTiles.load({ 
                 url: fileInfo.url, 
                 gltfLoader : loaders.glbLoader,  
@@ -6021,7 +6021,7 @@ export class Viewer extends ViewerBase{
                 if(master.panos) viewer.images360.judgeModelMat(e.tileContent)
                 //set Layers ?
                 Potree.Utils.setObjectLayers(e.tileContent, 'model')  
-           
+                e.tileContent.traverse(e=>e.material && (e.material.side = 2))//新软件导出的带坐标的box型模型要反面才看的到,干脆双面
             })
             
             {