3dgsUseCloud.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="description" content="">
  6. <meta name="author" content="">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  8. <title>Potree Viewer</title>
  9. <link rel="stylesheet" type="text/css" href="../../build/potree/potree.css">
  10. <link rel="stylesheet" type="text/css" href="../../libs/jquery-ui/jquery-ui.min.css">
  11. <link rel="stylesheet" type="text/css" href="../../libs/openlayers3/ol.css">
  12. <link rel="stylesheet" type="text/css" href="../../libs/spectrum/spectrum.css">
  13. <link rel="stylesheet" type="text/css" href="../../libs/jstree/themes/mixed/style.css">
  14. </head>
  15. <body>
  16. <script src="../../libs/jquery/jquery-3.1.1.min.js"></script>
  17. <script src="../../libs/spectrum/spectrum.js"></script>
  18. <script src="../../libs/jquery-ui/jquery-ui.min.js"></script>
  19. <script src="../../libs/other/BinaryHeap.js"></script>
  20. <script src="../../libs/tween/tween.min.js"></script>
  21. <script src="../../libs/d3/d3.js"></script>
  22. <script src="../../libs/proj4/proj4.js"></script>
  23. <script src="../../libs/openlayers3/ol.js"></script>
  24. <script src="../../libs/i18next/i18next.js"></script>
  25. <script src="../../libs/jstree/jstree.js"></script>
  26. <script src="../../build/potree/potree.js"></script>
  27. <script src="../../libs/plasio/js/laslaz.js"></script>
  28. <!-- <script src="../../libs/stats.js/stats.js"></script> -->
  29. <div class="potree_container" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; ">
  30. <div id="potree_render_area" style="background-image: url('../../build/potree/resources/images/background.jpg');">
  31. </div>
  32. <div id="potree_sidebar_container"> </div>
  33. </div>
  34. <!-- <script src="https://webapi.amap.com/maps?v=2.0&key=4578048f6e03386759d5609401e738d3"></script> -->
  35. <script type="module">
  36. import * as THREE from "../libs/three.js/build/three.module.js";
  37. import browser from '../src/custom/utils/browser.js' //这里必须加.js
  38. window.THREE = THREE
  39. var changeLog = ()=>{
  40. var textarea = document.createElement('textarea');
  41. textarea.id = "consoleLog";
  42. textarea.style.width = '160px';
  43. textarea.style.height = '200px'
  44. textarea.style.position = 'fixed'
  45. textarea.style.left = 0
  46. textarea.style.bottom = '50px'
  47. textarea.style['z-index'] = 9999;
  48. textarea.style.color = 'black';
  49. textarea.style.opacity = 0.9;
  50. textarea.style['font-size'] = '12px';
  51. textarea.style['backgroundColor'] = '#ffffff'
  52. document.getElementsByTagName("body")[0].appendChild(textarea);
  53. var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"]
  54. var exchange = function (o) {
  55. console["old" + o] = console[o];
  56. console[o] = function () {
  57. var args = Array.from(arguments)
  58. console["old" + o].apply(this, arguments)
  59. var t = document.getElementById("consoleLog").innerHTML;
  60. var str = ''
  61. args.forEach(a=>{
  62. str += a + ' '
  63. })
  64. document.getElementById("consoleLog").innerHTML = str + "\n\n" + t;
  65. }
  66. }
  67. for (var i = 0; i < list.length; i++) {
  68. exchange(list[i])
  69. }
  70. }
  71. Potree.browser.isMobile() && changeLog()
  72. var number = browser.urlHasValue('m',true);
  73. if(number == '') number = '1'
  74. let viewer = new Potree.Viewer(document.getElementById("potree_render_area"), null,{noMap:true} );
  75. //Potree.config.splatEnableSwapOut = 1
  76. let cloudPath = Potree.resourcePath + '/../data/webcloud/'+number+'/cloud.js'
  77. Potree.loadPointCloud(cloudPath, '1' ,'', 0, e => {
  78. let scene = viewer.scene;
  79. let pointcloud = e.pointcloud;
  80. let config = Potree.config.material
  81. let material = pointcloud.material;
  82. pointcloud.dataset_id = 0;//供漫游点找到属于的dataset点云
  83. material.minSize = config.minSize
  84. material.maxSize = config.maxSize
  85. material.pointSizeType = /* Potree.settings.isOfficial ? */ config.pointSizeType /* : 'ADAPTIVE' */ //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
  86. pointcloud.changePointSize(config.realPointSize) //material.size = config.pointSize;
  87. pointcloud.changePointOpacity(1)
  88. material.shape = Potree.PointShape.SQUARE;
  89. scene.addPointCloud(pointcloud);
  90. viewer.scene.axisArrow.visible = true
  91. //viewer.background.g = 0.8
  92. viewer.updateModelBound()
  93. Potree.settings.pointDensity = 'high'
  94. Potree.pointBudget = Potree.config.maxSplatCount = Potree.browser.isMobile() ? 1200000: 2600000//2560000 //为什么我的手机chrome最多870000,否则显示不出, 去掉swapBuffer后该值上升到1250000. 通过减少WebAssembly的page数量,该值又上升到2560000
  95. Potree.settings.maxLRUPoints = Potree.browser.isMobile() ? 5000000 : 10000000
  96. viewer.setFOV(90)
  97. viewer.dispatchEvent('allLoaded')
  98. Potree.settings.editType = 'pano'
  99. pointcloud.matrixAutoUpdate = true
  100. pointcloud.rotation.x = -Math.PI/2
  101. pointcloud.position.z += 5
  102. pointcloud.updateMatrixWorld()
  103. viewer.splatMesh = new Potree.Splat({/*splatAdaptiveSize:true*/})
  104. //viewer.splatMesh.splatAttrSameMemory = 1
  105. //setTimeout(()=>{
  106. viewer.splatMesh.addPointcloud(pointcloud)
  107. //viewer.splatMesh.material.uniforms.splatScale.value = 2
  108. viewer.splatMesh.rotation.x = -Math.PI/2
  109. viewer.splatMesh.position.copy(viewer.scene.pointclouds[0].position)
  110. viewer.splatMesh.updateMatrixWorld()
  111. //viewer.scene.pointclouds[0].visible = false //这样的话visibleNode会空的
  112. //pointcloud.material.opacity = 0
  113. //viewer.setControls(viewer.orbitControls)
  114. viewer.mainViewport.view.radius = 50
  115. //viewer.splatMesh.updateSort()
  116. viewer.objs.add(viewer.splatMesh)
  117. viewer.splatMesh.transformCallBack()
  118. //},3000)
  119. //viewer.splatMesh.switchAttrUpdateType(0)
  120. })
  121. $('#mapGaode').hide()
  122. if(number == 2){
  123. viewer.mainViewport.view.position.copy({
  124. "x": -36.62326905272484,
  125. "y": 26.80552611959561,
  126. "z": -50.20190987018996
  127. })
  128. viewer.mainViewport.view.quaternion = new THREE.Quaternion().fromArray([
  129. 0.4046133492786237,
  130. -0.3738127361560443,
  131. -0.5663550849489183,
  132. 0.6130203859787777
  133. ])
  134. }
  135. //放到线上了 https://www.4dmodel.com/test/potree_bak/examples/3dgsUseCloud.html?m=0
  136. </script>
  137. </body>
  138. </html>