Explorar o código

成功加入目前的最新版splatter。(支持文件缓存,能加载无穷大的场景)

xzw hai 1 mes
pai
achega
9169b775ea

+ 181 - 0
examples/splatter.html

@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<meta name="description" content="">
+	<meta name="author" content="">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
+	<title>Potree Viewer</title>
+
+	<link rel="stylesheet" type="text/css" href="../../build/potree/potree.css">
+	<link rel="stylesheet" type="text/css" href="../../libs/jquery-ui/jquery-ui.min.css">
+	<link rel="stylesheet" type="text/css" href="../../libs/openlayers3/ol.css">
+	<link rel="stylesheet" type="text/css" href="../../libs/spectrum/spectrum.css">
+	<link rel="stylesheet" type="text/css" href="../../libs/jstree/themes/mixed/style.css">
+</head>
+<style>
+    #consoleLog{ 
+      width: 30%;
+      height: 130px;
+      position: absolute;
+      right: 0px;
+      bottom: 2px;
+      z-index: 999999;
+      color: "321";
+      opacity: 0.9;
+        font-size: 10px;
+        
+    }
+</style>
+<body>
+	<script src="../../libs/jquery/jquery-3.1.1.min.js"></script>
+	<script src="../../libs/spectrum/spectrum.js"></script>
+	<script src="../../libs/jquery-ui/jquery-ui.min.js"></script>
+	<script src="../../libs/other/BinaryHeap.js"></script>
+	<script src="../../libs/tween/tween.min.js"></script>
+	<script src="../../libs/d3/d3.js"></script>
+	<script src="../../libs/proj4/proj4.js"></script> 
+	
+    
+	<script src="../../libs/openlayers3/ol.js"></script>
+	<script src="../../libs/i18next/i18next.js"></script>
+	<script src="../../libs/jstree/jstree.js"></script>
+	<script src="../../build/potree/potree.js"></script>
+	<script src="../../libs/plasio/js/laslaz.js"></script>
+	
+	<!-- <script src="../../libs/stats.js/stats.js"></script> -->
+	<div class="potree_container" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; ">
+		<div id="potree_render_area" style="background-image: url('../../build/potree/resources/images/background.jpg');">
+            
+		</div>
+		<div id="potree_sidebar_container"> </div>
+	</div>
+    <!-- <script src="https://webapi.amap.com/maps?v=2.0&key=4578048f6e03386759d5609401e738d3"></script> -->
+	<script type="module">
+
+	import * as THREE from "../libs/three.js/build/three.module.js";
+    import browser from '../src/custom/utils/browser.js' //这里必须加.js
+    window.THREE = THREE 
+   
+    Potree.config.view.near = 0.001,  Potree.config.view.far = 1e3  //same as splatter  
+    
+    var splatId = browser.urlHasValue('m',true)  
+    var urlAtSplatter = !browser.urlHasValue('urlAtCurrent') ; 
+    //Potree.start(document.getElementById("potree_render_area"),null, null,{noMap:true}); 
+    new Potree.Viewer(document.getElementById("potree_render_area") , null, {noMap:true});
+    viewer.background.set('#000')
+    
+    
+    if(splatId === ''){
+        splatId = 'SG-t-jp-zSUztbgFpmt', urlAtSplatter = true
+    }
+    /*const defaultConfig = {
+        "splatId": 'SG-t-jp-zSUztbgFpmt', // "test0_4096_L8_not_sortscale", 
+        "block": 65536, 
+        "root": {
+            "radius": 0.6,//0.4,//  1.024,
+            "size": 35031//8326 //8534
+        },
+        "size": 649*65536,  //421*
+        "tile": 4,  
+        path: Potree.resourcePath+'../../../../examples/tomcat/splatter.app/data',
+        view:{
+            "yaw": -1.5924752534051696,
+            "pitch": -0.14400671146230742,
+            "position": {
+                "x": -45.12437783490361,
+                "y": 1.6148221490172163,
+                "z": 2.9891692740919122
+            }
+        }
+    }  */
+    
+    
+    
+    
+    
+    let applyConfig = (config)=>{
+        new Potree.Splatter(viewer,config); 
+        config.view && viewer.mainViewport.view.applyJson(config.view) 
+         
+        let dom = document.querySelector('#mapGaode')
+        if(dom){
+            viewer.splatter.logArea = dom 
+            dom.style.height = '43px',         dom.style.width = '200px'
+            dom.style['font-size'] = '14px'
+        } 
+ 
+    }
+    
+    if(splatId!=''){
+        let path = browser.urlHasValue('gsPath', true) 
+        if(!path){ 
+            if(urlAtSplatter){
+                path = Potree.resourcePath + '../../../../examples/tomcat/splatter.app/data/' + splatId  
+            }else{
+                path = Potree.resourcePath + '/../data/splatter/' + splatId 
+            }
+        }
+        
+        let dataVersion = path.includes('http') ? Date.now() : 10
+        let jsonUrl = Potree.Common.joinUrl(path, 'data.json?m='+dataVersion)
+        Potree.loadFile(jsonUrl,{},(e)=>{ 
+            let config = Object.assign({
+                
+            }, e, {
+                "block": 65536, 
+                "root": {
+                    "radius": browser.urlHasValue('radius', true) || e.radius || (browser.isMobile() ? 0.25 : 0.6),    
+                    "size": e.level_0   //8326 //8534
+                },
+                "size": e.size || e.files*65536,   
+                path,  
+                dataVersion: 6,
+                
+            })  
+        
+            applyConfig(config)
+        })
+    
+    
+    } 
+     
+     
+     
+    viewer.scene.axisArrow.visible = true  
+    //example: https://192.168.0.59:1234/examples/splatter.html?m=rly-jb1  
+     
+    //viewer.setFOV(50) //splatter原本中设置最小fov为50
+    viewer.setFOV(75) //原本70,在手机端比splatter的点多,增大fov会减少点
+    Potree.settings.intersectWhenHover = false   //降cpu
+    //viewer.scene.axisArrow.visible = true // 会导致效果不对还警告?!!!!
+    
+    
+    
+    if(browser.isMobile()){
+        window.addEventListener("load", ()=>{
+            var textarea = document.createElement('textarea');
+            textarea.id = "consoleLog";
+
+            document.getElementsByTagName("body")[0].appendChild(textarea);
+            var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"]
+            var exchange = function (o) {
+                console["old" + o] = console[o];
+                console[o] = function (str ) {
+                    console["old" + o].apply(this, arguments)
+                    textarea.innerHTML = str + "\n\n" + textarea.innerHTML;
+                }
+            }
+
+            for (var i = 0; i < list.length; i++) {
+                exchange(list[i])
+            }  
+         
+        }) 
+    }
+    
+	</script>
+	
+	
+  </body>
+</html>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2884 - 0
src/custom/objects/3dgs/splatter/SplatterThree.js


+ 2 - 2
src/custom/start.js

@@ -35,7 +35,7 @@ var transformPointcloud = (pointcloud, dataset)=>{
      
 }
 
-export function start(dom, mapDom, number ){ //t-Zvd3w0m
+export function start(dom, mapDom, number, info={} ){ //t-Zvd3w0m
     /* {
         let obj = JSON.parse(localStorage.getItem('setting'))
         for(let i in obj){
@@ -57,7 +57,7 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
     if(browser.urlHasValue('google'))Potree.settings.mapCompany = 'google' 
     if(browser.urlHasValue('timing'))Potree.measureTimings = 1
     
-    let viewer = new Potree.Viewer(dom , mapDom);
+    let viewer = new Potree.Viewer(dom , mapDom, info);
       
     let Alignment = viewer.modules.Alignment
      

+ 3 - 2
src/custom/viewer/ViewerNew.js

@@ -360,7 +360,7 @@ export class Viewer extends ViewerBase{
                             if(e.event.key.toLowerCase() == 'c'){
                                 let info = JSON.stringify(  this.mainViewport.view.getJson() );
                                 console.log(`Copy view params: ${info}`),
-                                navigator.clipboard.writeText(info)  
+                                navigator.clipboard.writeText(info)  //need https
                                   
                             }else if(e.event.key.toLowerCase() == 'v'){
                                 navigator.clipboard.readText().then(A=>{
@@ -3436,7 +3436,7 @@ export class Viewer extends ViewerBase{
                 width = Math.ceil(width)        //使用ceil,当原本有小数时,会重叠一个像素,无所谓
                 height = Math.ceil(height)
                 
-                let scissorTest =  viewport.width<1 || viewport.height<1  
+                let scissorTest = viewport.width<1 || viewport.height<1   //不设置这个会把别的viewport clear掉
                 if(params_.target){
                     params_.target.viewport.set(left, bottom, width, height);  
                     scissorTest && params_.target.scissor.set(left, bottom, width, height); 
@@ -4937,6 +4937,7 @@ export class Viewer extends ViewerBase{
           
         if(needRecord || Potree.measureTimings){
             performance.mark(name+"-"+type)
+            //console.log('mark', name, type)
              
             if(type == 'end'){
                 let measure = performance.measure(name,name+"-start",name+"-end");

+ 1 - 1
src/navigation/InputHandlerNew.js

@@ -441,7 +441,7 @@ export class InputHandler extends THREE.EventDispatcher {
       
         
         //if(isTouch || !Potree.settings.intersectWhenHover ){ 
-        if(isTouch || !this.dragViewport.view.isFlying() &&  Potree.settings.intersectWhenHover && Potree.settings.editType != 'pano'  ){//漫游点编辑如果拖拽前getIntersect旋转会延迟
+        if(isTouch || !this.dragViewport.view.isFlying() &&  !Potree.settings.intersectWhenHover && Potree.settings.editType != 'pano'  ){//漫游点编辑如果拖拽前getIntersect旋转会延迟
             //isTouch必须更新 否则是旧的 
             this.hoveredElements = this.getHoveredElements();
             let dontIntersect = false