splatter.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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>splatter</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. <style>
  16. #consoleLog{
  17. width: 30%;
  18. height: 130px;
  19. position: absolute;
  20. right: 0px;
  21. bottom: 45px;
  22. z-index: 999999;
  23. color: "321";
  24. opacity: 0.9;
  25. font-size: 10px;
  26. }
  27. #move_Btns{
  28. position: fixed;
  29. bottom: 10px;
  30. width: 60px;
  31. left: 3px;
  32. height: 200px;
  33. z-index: 90;
  34. display: grid;
  35. }
  36. #move_Btns>button{
  37. transform: rotate(90deg);
  38. position: relative;
  39. font-size: 29px;
  40. user-select: none;
  41. }
  42. #move_Btns span{
  43. pointer-events:none;
  44. }
  45. </style>
  46. <body>
  47. <script src="../../libs/jquery/jquery-3.1.1.min.js"></script>
  48. <script src="../../libs/spectrum/spectrum.js"></script>
  49. <script src="../../libs/jquery-ui/jquery-ui.min.js"></script>
  50. <script src="../../libs/other/BinaryHeap.js"></script>
  51. <script src="../../libs/tween/tween.min.js"></script>
  52. <script src="../../libs/d3/d3.js"></script>
  53. <script src="../../libs/proj4/proj4.js"></script>
  54. <script src="../../libs/openlayers3/ol.js"></script>
  55. <script src="../../libs/i18next/i18next.js"></script>
  56. <script src="../../libs/jstree/jstree.js"></script>
  57. <script src="../../build/potree/potree.js"></script>
  58. <script src="../../libs/plasio/js/laslaz.js"></script>
  59. <!-- <script src="../../libs/stats.js/stats.js"></script> -->
  60. <div class="potree_container" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; ">
  61. <div id="potree_render_area" style="background-image: url('../../build/potree/resources/images/background.jpg');">
  62. </div>
  63. <div id="potree_sidebar_container"> </div>
  64. </div>
  65. <!-- <div id='move_Btns' >
  66. <button name='forward2' > <span><<</span></button>
  67. <button name='forward' > <span><</span></button>
  68. <button name='backward' ><span>></span></button>
  69. <button name='backward2' ><span>>></span></button>
  70. </div> -->
  71. <!-- <script src="https://webapi.amap.com/maps?v=2.0&key=4578048f6e03386759d5609401e738d3"></script> -->
  72. <script type="module">
  73. //import * as THREE from "../libs/three.js/build/three.module.js";
  74. import browser from '../src/custom/utils/browser.js' //这里必须加.js
  75. //window.THREE = THREE
  76. Potree.settings.showStats = true
  77. Potree.config.view.near = 0.001, Potree.config.view.far = 1e3 //same as splatter
  78. let log = 0// browser.isMobile()
  79. if(log){//
  80. //window.addEventListener("load", ()=>{
  81. var textarea = document.createElement('textarea');
  82. textarea.id = "consoleLog";
  83. document.getElementsByTagName("body")[0].appendChild(textarea);
  84. var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"]
  85. var exchange = function (o) {
  86. console["old" + o] = console[o];
  87. console[o] = function () {
  88. console["old" + o].apply(this, arguments)
  89. let str = ''
  90. for(let i=0;i<arguments.length;i++){
  91. str += arguments[i] + ' '
  92. }
  93. textarea.innerHTML = str + "\n\n" + textarea.innerHTML;
  94. }
  95. }
  96. for (var i = 0; i < list.length; i++) {
  97. exchange(list[i])
  98. }
  99. //})
  100. /*{
  101. let btns = document.querySelector('#move_Btns')
  102. Array.from(btns.children).forEach((e,i)=>{
  103. let name = i<2 ? 'FORWARD' : 'BACKWARD'
  104. let f = (ev)=>{
  105. ev.preventDefault()
  106. ev.stopPropagation()
  107. viewer.inputHandler.pressedKeys[viewer.controls.keys['FORWARD'][0]] = 0
  108. viewer.inputHandler.pressedKeys[viewer.controls.keys['BACKWARD'][0]] = 0
  109. }
  110. let pointerdown = (ev)=>{
  111. f(ev)
  112. viewer.inputHandler.pressedKeys[viewer.controls.keys[name][0]] = 1;
  113. (i==1||i==2) && (viewer.inputHandler.pressedKeys[viewer.controls.keys['ALT'][0]] = 1)
  114. //viewer.inputHandler.pressedKeys[viewer.controls.keys['SPACE'][0]] = 1
  115. }
  116. let pointerup = (ev)=>{
  117. f(ev)
  118. viewer.inputHandler.pressedKeys[viewer.controls.keys['ALT'][0]] = 0
  119. //viewer.inputHandler.pressedKeys[viewer.controls.keys['SPACE'][0]] = 0
  120. }
  121. e.addEventListener('pointerdown',pointerdown)
  122. e.addEventListener('pointerup', pointerup)
  123. e.addEventListener('pointerout', pointerup)
  124. })
  125. }*/
  126. }
  127. var splatId = browser.urlHasValue('m',true)
  128. var urlAtSplatter = !browser.urlHasValue('urlAtCurrent') ;
  129. //Potree.settings.ctrlRotInvSmooth = true
  130. Potree.settings.firstCtrlRotSmooth = true
  131. Potree.settings.rotAroundPoint = false
  132. Potree.settings.noAA = true
  133. //Potree.start(document.getElementById("potree_render_area"),null, null,{noMap:true});
  134. new Potree.Viewer(document.getElementById("potree_render_area") , null, {noMap:true, enableJoy:true});
  135. viewer.background.set('#000')
  136. Potree.settings.orbitCtlMoveFree = true
  137. let dom = document.querySelector('#mapGaode')
  138. if(dom){
  139. //viewer.splatter.logArea = dom
  140. dom.style.height = '134px', dom.style.width = '200px'
  141. dom.style['font-size'] = '14px'
  142. window.logAreaTool = {
  143. area: dom,
  144. list:{},
  145. change(name, text, level=0){
  146. this.list[name] = {text, level}
  147. this.update()
  148. },
  149. remove(name){
  150. delete this.list[name]
  151. this.update()
  152. },
  153. update(){
  154. let text = ''
  155. let objects = Object.values(this.list)
  156. objects.sort((a,b)=>{return b.level - a.level})
  157. for(let i=0, len=objects.length; i<len; i++){
  158. text += objects[i].text + '<br>'
  159. }
  160. this.area.innerHTML = text
  161. }
  162. }
  163. }
  164. if(splatId === ''){
  165. splatId = 'SG-t-jp-zSUztbgFpmt', urlAtSplatter = true
  166. }
  167. let localProfile = {
  168. 'SG-t-WSs5eaQJLoc' :{
  169. //view : {"yaw":-1.6062499999999997,"pitch":0.13850996852046182,"position":{"x":-42.06086329177142,"y":3.3968851133538633,"z":-1.9854159672413823}}
  170. view : {"yaw":-1.6034087578950877,"pitch":0.1454619081473329,"position":{"x":-41.71435321819845,"y":3.2051723875245823,"z":-1.808349204344115}}
  171. }
  172. }[splatId]
  173. Potree.settings.number = splatId == 'rly-jb1' ? 'SG-t-WSs5eaQJLoc' : splatId
  174. let applyConfig = (config)=>{
  175. let splatter = new Potree.Splatter(viewer,config);
  176. splatter.visible = true
  177. config.view && viewer.mainViewport.view.applyJson(config.view)
  178. }
  179. if(splatId!=''){
  180. let path = browser.urlHasValue('gsPath', true)
  181. if(path){
  182. path = Potree.Common.replaceAll(path,'{splatId}',splatId)
  183. }else{
  184. if(urlAtSplatter){
  185. path = Potree.resourcePath + '../../../../examples/tomcat/splatter.app/data/' + splatId
  186. }else{
  187. path = Potree.resourcePath + '/../data/splatter/' + splatId
  188. }
  189. }
  190. let dataVersion = path.includes('http') ? Date.now() : 10
  191. let jsonUrl = Potree.Common.joinUrl(path, 'data.json?m='+dataVersion)
  192. Potree.loadFile(jsonUrl,{},(e)=>{
  193. let config = Object.assign( e, localProfile, {
  194. "block": 65536,
  195. "root": {
  196. "radius": browser.urlHasValue('radius', true) || e.radius || (browser.isMobile() ? 0.25 : 0.6),
  197. "size": e.level_0 //8326 //8534
  198. },
  199. "size": e.size || e.files*65536,
  200. path,
  201. dataVersion: 6,
  202. })
  203. applyConfig(config)
  204. let btn1 = document.querySelector('#potree_render_area [value=">>全景"]')
  205. btn1.style.right = '27%'
  206. /*btn1.value = '停lod'
  207. btn1.onclick = ()=>{
  208. btn1.value = btn1.value == '停lod' ? '开lod' : '停lod'
  209. viewer.splatter.renderer.lodder.pauseLod = btn1.value == '停lod' ? 0 : 1
  210. }*/
  211. btn1.value = '停碰撞'
  212. btn1.onclick = ()=>{
  213. btn1.value = btn1.value == '停碰撞' ? '开碰撞' : '停碰撞'
  214. window.stopColl = btn1.value == '停碰撞' ? 0 : 1
  215. }
  216. let btn2 = document.querySelector('#potree_render_area [value="隐藏点云"]')
  217. /*btn2.value = '停sort'
  218. btn2.onclick = ()=>{
  219. btn2.value = btn2.value == '停sort' ? '开sort' : '停sort'
  220. viewer.splatter.renderer.lodder.pauseSort = btn2.value == '停sort' ? 0 : 1
  221. }*/
  222. btn2.value = 'toggleMesh'
  223. btn2.onclick = ()=>{
  224. viewer.collider.toggleMesh()
  225. }
  226. browser.urlHasValue('character') && viewer.setControls(viewer.characterCtrl)
  227. let modeBtn = document.createElement('input')
  228. btn2.parentElement.appendChild(modeBtn)
  229. modeBtn.style.width = '60px'
  230. modeBtn.style.right = '5px'
  231. modeBtn.style.top = '5px'
  232. modeBtn.style['z-index'] = 10000;
  233. modeBtn.style['position'] = 'absolute';
  234. modeBtn.value = '枢轴模式'
  235. let firstControl = viewer.controls
  236. viewer.orbitControls.constantlyForward = true
  237. viewer.orbitControls.progression = true
  238. modeBtn.onclick = ()=>{
  239. modeBtn.value = modeBtn.value == '枢轴模式' ? '第一人称' : '枢轴模式'
  240. viewer.setControls(modeBtn.value == '枢轴模式' ? firstControl : viewer.orbitControls)
  241. viewer.mainViewport.view.radius = 10 //for orbit
  242. }
  243. })
  244. }
  245. Potree.settings.dblToFocusPoint = 1
  246. viewer.scene.axisArrow.visible = true
  247. viewer.scene.axisArrow.position.z = 20
  248. //example: https://192.168.0.59:1234/examples/splatter.html?m=rly-jb1
  249. Potree.config.view.fov = 50
  250. Potree.settings.keepMinFov = true
  251. viewer.setFOV(50)//原本70,在手机端比splatter的点多,增大fov会减少点
  252. Potree.settings.intersectWhenHover = false //降cpu
  253. </script>
  254. </body>
  255. </html>