浏览代码

Merge branch 'master' of http://192.168.0.115:3000/4dkankan/4dkankan_bim

rindy 2 年之前
父节点
当前提交
73a23b8b8a
共有 3 个文件被更改,包括 32 次插入15 次删除
  1. 1 1
      src/pages/Bim.vue
  2. 5 0
      src/pages/LaserBim.vue
  3. 26 14
      src/utils/ConvertViews.js

+ 1 - 1
src/pages/Bim.vue

@@ -4,7 +4,7 @@
 <script setup>
 import { onMounted } from 'vue'
 
-let viewToken = 'fe69c34c232047989b3619489027d9df'
+let viewToken = 'ffe9f0c3d80f4a1bb064b66917503d1f'
 // 声明Viewer及App
 let app
 let viewer3D

+ 5 - 0
src/pages/LaserBim.vue

@@ -105,6 +105,11 @@ const onLoadSource = () => {
         }
         
         window.viewer1 = sourceApp.viewer 
+        
+        viewer1.mainViewport.view.minPitch+=0.01//防止bim垂直视角上的闪烁(似乎是因 up 要乘以某矩阵导致微小偏差所致)
+        viewer1.mainViewport.view.minPitch-=0.01
+        
+        
         initConvertView()
         sourceSceneName = sourceApp.Potree.settings.number
         sourceApp.viewer.addEventListener('camera_changed', e => { 

+ 26 - 14
src/utils/ConvertViews.js

@@ -5,7 +5,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
         super()
         this.sourceApp = null
         this.targetApp = null
-        
+        this.sourceType = null
        
     }
 
@@ -15,11 +15,10 @@ export default class ConvertViews extends THREE.EventDispatcher{
         this.sourceApp = null;
         if(!o.dontClearTarget){
             this.targetApp = null
-        }
-         
+        } 
     }
     
-    init(sourceApp, targetApp, sourceDom, sceneType, cameraData, sourcePano) {
+    init(sourceApp, targetApp, sourceDom, sourceType, cameraData, sourcePano) {
         //if (!this.player1.model.panos.list.length || !this.player2.model.panos.list.length) return
         
         if(this.loaded || !targetApp ) return 
@@ -27,17 +26,19 @@ export default class ConvertViews extends THREE.EventDispatcher{
         this.sourceApp = sourceApp
         this.targetApp = targetApp
         this.sourceDom = sourceDom
+        this.sourceType = sourceType
         let viewer = this.viewer = targetApp.viewer 
         
-        this.needConvertAxis = sceneType == '4dkk'
+        this.needConvertAxis = sourceType == '4dkk' // Y朝上需要转换
+        
         this.lastCamStatus = viewer.getCameraStatus()
-        this.computeAveDiffLon(sourcePano)
+        this.computeShift(sourcePano)
         
         viewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk)
         viewer.setFlySpeedRate(5)
-        viewer.getViewer().setTransitionAnimationState(false) //setCameraStatus瞬间变化相机
-        
-        viewer.addEventListener('Rendered', (e)=>{
+        viewer.getViewer().setTransitionAnimationState(false) //setCameraStatus瞬间变化相机 ,or setCameraAnimation?
+         
+        viewer.addEventListener('Rendered', (e)=>{//反向改变左侧相机
             let info = viewer.getCameraStatus() 
             let poseChanged = !math.closeTo(this.lastCamStatus.position, info.position)
                 || !math.closeTo(this.lastCamStatus.target, info.target)
@@ -48,8 +49,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
                     this.send(info)
                     this.lastCamStatus = info 
                 }  
-            } 
-            
+            }  
         })  
         
         
@@ -218,8 +218,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
 
 
 
-    computeAveDiffLon(sourcePano) {
-        //获取两个场景的lon偏差值
+    computeShift(sourcePano) { //获取两个场景的旋转和位移偏差值
         //需要点的个数>1, 且两个场景点一一对应,位置接近且顺序一致
         //pick两个点来计算
         let diffLonAve = 0,
@@ -296,7 +295,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
     }
 
 
-    lockCamera(locked){
+    lockCamera(locked){//禁止操作改变相机
         this.locked = locked 
         this.updateCtrlEnable() 
     }
@@ -397,3 +396,16 @@ export default class ConvertViews extends THREE.EventDispatcher{
         //位置参照第一个漫游点。保持相机相对第一个漫游点的位移和
     } */
 }
+
+
+
+/* 
+
+note:
+
+
+旋转只能通过target设置, 不能直接改camera.quaternion
+当且仅当发送方相机属性变化后才传递过来,就不在这里判断是否变化了。
+(所以只需要实时检测相机是否改变, hasChanged后发送)
+
+ */