Procházet zdrojové kódy

fix: 准备开始写3dTiles

xzw před 2 roky
rodič
revize
08d5ddbdf5

+ 16 - 4
src/ExtendPointCloudOctree.js

@@ -68,7 +68,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
             this.nodeMaxLevel = level 
             //viewer.dispatchEvent({type:'updateNodeMaxLevel', pointcloud: this, nodeMaxLevel:level}) 
              
-            //console.log('updateNodeMaxLevel ' + this.dataset_id + " : "+ this.nodeMaxLevel)                
+            console.log('updateNodeMaxLevel ' + this.dataset_id + " : "+ this.nodeMaxLevel)                
               
             this.setPointLevel()//重新计算
              
@@ -477,7 +477,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
     changePointSize(num, sizeFitToLevel) {
  
         if(this.material.pointSizeType != PointSizeType.ATTENUATED){
-            return num && (this.material.size = num)
+            return num && (this.material.size = num / Potree.config.material.realPointSize / 1.3)
         }
         if (num == void 0) {
             num = this.temp.pointSize
@@ -502,10 +502,10 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                 this.material.size = value
             }else{
                 
-                let base = this.material.spacing / Math.pow(2, this.maxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2
+                let base = this.material.spacing / Math.pow(2, this.maxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2.  (不同场景还是会有偏差)
                 base *= this.nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(this.maxLevel / this.nodeMaxLevel, 1.3)) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙
 
-                this.material.size = base * 3 * num/*  * window.devicePixelRatio */
+                this.material.size = base * 5 * num/*  * window.devicePixelRatio */
                 //在t-8BCqxQAr93 会议室 和 t-e2Kb2iU 隧道 两个场景里调节,因为它们的spacing相差较大,观察会议室墙壁的龟裂程度
                 this.temp.sizeFitToLevel[str] = this.material.size
             }
@@ -578,7 +578,19 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
     updateBound(){
         var boundingBox_ = this.pcoGeometry.tightBoundingBox.clone().applyMatrix4(this.matrixWorld)
         this.bound = boundingBox_
+        this.bound2 = this.getBoundWithPanos()
     } 
+    getBoundWithPanos(){//确保pano在内的bound 
+        let bound = this.bound.clone()
+        this.panos.forEach(pano=>{
+            let panoBound = new THREE.Box3
+            panoBound.expandByPoint(pano.position)
+            panoBound.expandByVector(new THREE.Vector3(1,1,1));//give pano a margin
+            bound.union(panoBound)
+        }) 
+        return bound
+    }
+    
     getPanosBound(){
         if(this.panos.length > 0){
             let minSize = new THREE.Vector3(1,1,1)

+ 1 - 0
src/PointCloudOctree.js

@@ -5,6 +5,7 @@ import {PointCloudOctreeGeometryNode} from "./PointCloudOctreeGeometry.js";
 import {Utils} from "./utils.js";
 import {PointCloudMaterial} from "./materials/PointCloudMaterial.js";
 
+//见ExtendPointCloudOctree
 
 export class PointCloudOctreeNode extends PointCloudTreeNode {
 	constructor () {

+ 3 - 1
src/custom/materials/ModelTextureMaterial.js

@@ -309,7 +309,8 @@ export default class ModelTextureMaterial extends THREE.RawShaderMaterial {
         setSize({viewport})
 
 
-        viewer.addEventListener('resize',(e)=>{
+        viewer.addEventListener('resize',(e)=>{ 
+            if(e.viewport.name != "MainView")return
             setSize(e)     
         }) 
         
@@ -320,6 +321,7 @@ export default class ModelTextureMaterial extends THREE.RawShaderMaterial {
             //add
             
             viewer.addEventListener('camera_changed', (e)=>{
+                if(e.viewport.name != "MainView")return
                 //this.uniforms.projectionMatrix.value.copy(e.camera.projectionMatrix) 
                 e.camera && this.uniforms.inverseProjectionMatrix.value.copy(e.camera.projectionMatrixInverse)
             })   

+ 2 - 2
src/custom/modules/panos/Images360.js

@@ -626,7 +626,7 @@ export class Images360 extends THREE.EventDispatcher{
 
 
 	cancelFlyToPano(){//取消当前已有的飞行准备,前提是相机还未移动
-        Potree.Log('cancelFlyToPano')
+        //Potree.Log('cancelFlyToPano')
         if(viewer.mainViewport.view.isFlying())return
         this.nextPano = null 
         this.latestToPano = null
@@ -686,7 +686,7 @@ export class Images360 extends THREE.EventDispatcher{
         this.nextPano = pano 
         this.latestToPano = toPano
         //this.flying = true  //防止新的请求
-        Potree.Log('flyToPano:'+pano.id + ' , duration:'+toPano.duration)
+        Potree.Log('flyToPano:'+pano.id + ' , duration:'+toPano.duration, null, 12)
         
         
         {//不飞的话是否不要执行这段?

+ 3 - 3
src/custom/modules/panos/Panorama.js

@@ -252,13 +252,13 @@ class Panorama extends THREE.EventDispatcher{
     loadDepthImg(){ 
         if(!this.pointcloud.hasDepthTex || this.depthTex || this.depthTexLoading)return
         this.depthTexLoading = true
-        let src = Potree.settings.number == 'SS-t-7DUfWAUZ3V' ?  `${Potree.scriptPath}/data/${Potree.settings.number}/depthMap/${this.originID}.png`
-                : `https://laser-oss.4dkankan.com/${Potree.settings.webSite}/${this.pointcloud.sceneCode}/data/${this.pointcloud.sceneCode}/depthmap/${this.originID}.png`
+        let src = //Potree.settings.number == 'SS-t-7DUfWAUZ3V' ?  `${Potree.scriptPath}/data/${Potree.settings.number}/depthMap/${this.originID}.png` :
+                 `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${this.pointcloud.sceneCode}/data/${this.pointcloud.sceneCode}/depthmap/${this.originID}.png`
         let texture = texLoader.load( src, ()=>{
             this.depthTex = texture
             this.images360.dispatchEvent({type:'loadedDepthImg', pano:this, loaded:true})
             this.depthTexLoading = false
-        },(e)=>{//error
+        },null,(e)=>{//error
             console.error('loadDepthImg失败, 数据集sceneCode'+ this.pointcloud.sceneCode,  this.id )
             this.pointcloud.hasDepthTex = false
             this.images360.dispatchEvent({type:'loadedDepthImg', pano:this, })

+ 2 - 2
src/custom/potree.shim.js

@@ -430,12 +430,12 @@ Utils.screenPass = new function () {
 	};
 }();
 
-//add
+//add 
 Utils.computePointcloudsBound = function(pointclouds){
     var boundingBox = new THREE.Box3();
     pointclouds.forEach(pointcloud=>{
         pointcloud.updateBound()
-        boundingBox.union(pointcloud.bound)
+        boundingBox.union(pointcloud.bound2)
     })
     var boundSize = boundingBox.getSize(new THREE.Vector3)
     var center = boundingBox.getCenter(new THREE.Vector3)

+ 1 - 2
src/custom/settings.js

@@ -89,8 +89,7 @@ const config = {//配置参数   不可修改
         flyOut:1000
     }
     
-    ,
-    moveSpeedAdujust : 0.5  //越小越慢
+    
     ,
     view:{
         fov:70,  //navvis:50 

+ 1 - 1
src/custom/start.js

@@ -201,7 +201,7 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
                     pointcloud.hasDepthTex = Potree.settings.useDepthTex && (!!dataset.has_depth  ||  Potree.settings.isLocalhost && Potree.settings.number == 'SS-t-7DUfWAUZ3V') //test   
                     material.minSize =  config.minSize
                     material.maxSize =  config.maxSize   
-                    material.pointSizeType = config.pointSizeType //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
+                    material.pointSizeType = Potree.settings.isOfficial ? config.pointSizeType : 'ADAPTIVE'  //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
                     pointcloud.changePointSize(config.realPointSize)  //material.size =  config.pointSize;
                     pointcloud.changePointOpacity(1)
                     material.shape = Potree.PointShape.SQUARE; 

+ 21 - 5
src/navigation/FirstPersonControlsNew.js

@@ -69,7 +69,9 @@ export class FirstPersonControls extends THREE.EventDispatcher {
         //this.enableChangePos = true
         
         this.viewer.addEventListener('camera_changed',(e)=>{
-            e.viewport && this.setFPCMoveSpeed(e.viewport)
+            if(this.viewer.name == 'mapViewer' || e.changeInfo && e.changeInfo.positionChanged && !viewer.mainViewport.view.isFlying() ){
+                this.setFPCMoveSpeed(e.viewport)
+            } 
         })
         
 
@@ -119,8 +121,8 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                     this.pitchDelta -= e.drag.pointerDelta.y * rotationSpeed; */
 
                     //旋转方向和偏移量尽量和在漫游点处旋转方式的一样
-                    this.yawDelta += e.drag.pointerDelta.x / 700 * viewport.resolution.x
-                    this.pitchDelta -= e.drag.pointerDelta.y / 700 * viewport.resolution.y
+                    this.yawDelta += e.drag.pointerDelta.x / 500 * viewport.resolution.x
+                    this.pitchDelta -= e.drag.pointerDelta.y / 500 * viewport.resolution.y
                    
                     //先更新一下相机:    
                     this.update() 
@@ -514,14 +516,28 @@ export class FirstPersonControls extends THREE.EventDispatcher {
             viewport.setMoveSpeed(s)   
             
         }else{
-            if(viewport == viewer.mainViewport && FirstPersonControls.boundPlane){
+            /* if(viewport == viewer.mainViewport && FirstPersonControls.boundPlane){
                 let s = FirstPersonControls.boundPlane.distanceToPoint(viewer.mainViewport.view.position)
                 s = Math.sqrt(s) / 10;
                 s = Math.max(FirstPersonControls.standardSpeed , s)
                 s  *= Potree.config.moveSpeedAdujust;
                 viewer.setMoveSpeed(s)
+            } */
+            //根据和漫游点的最短距离算moveSpeed。缺点:对于导入的无漫游点的数据集没有意义。
+            if(viewport == viewer.mainViewport && FirstPersonControls.boundPlane){
+                let position = viewer.mainViewport.view.position 
+             
+                //let pointclouds = [viewer.atDatasets, ...viewer.scene.pointclouds.filter(pointcloud=>pointcloud.bound2.distanceToPoint(position) < )]
+                let pano = viewer.images360.findNearestPano()
+                if(!pano)return
+                let dis = pano.position.distanceTo(position)
+                let minSpeed = 0.07, minDis = 2, multiplier = 0.005;
+                let speed = dis <= minDis ? minSpeed : minSpeed + (dis-minDis) * multiplier
+                //console.log('dis', dis, 'speed', speed,  pano.id )
+                     
+                viewer.setMoveSpeed(speed)
             }
-            
+            //调试场景t-FhDWmV5xur 两个数据集,大的数据集没有漫游点。
         }
         
     }

+ 1 - 1
正式版手动更新备份/2022.11.14/更改.txt

@@ -1,5 +1,5 @@
 
-问题:点云编辑的坐标反向了。
+问题:点云编辑的坐标反向了。还有数据集外的漫游点全景图展示不全
 
 var t = e.panos[0].dataRotation.z
 n = e.panos[0].dataPosition.clone().negate();