meshes.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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. <!-- INCLUDE ADDITIONAL DEPENDENCIES HERE -->
  29. <!-- INCLUDE SETTINGS HERE -->
  30. <div class="potree_container" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; ">
  31. <div id="potree_render_area" style="background-image: url('../build/potree/resources/images/background.jpg');"></div>
  32. <div id="potree_sidebar_container"> </div>
  33. </div>
  34. <script type="module">
  35. import * as THREE from "../libs/three.js/build/three.module.js";
  36. import {PLYLoader} from "../libs/three.js/loaders/PLYLoader.js";
  37. import {OBJLoader} from "../libs/three.js/loaders/OBJLoader.js";
  38. window.viewer = new Potree.Viewer(document.getElementById("potree_render_area"));
  39. viewer.setEDLEnabled(true);
  40. viewer.setFOV(60);
  41. viewer.setPointBudget(1_000_000);
  42. viewer.loadSettingsFromURL();
  43. viewer.setDescription("Point cloud courtesy of <a target='_blank' href='https://www.sigeom.ch/'>sigeom sa</a>");
  44. viewer.loadGUI(() => {
  45. viewer.setLanguage('en');
  46. $("#menu_tools").next().show();
  47. $("#menu_scene").next().show();
  48. //viewer.toggleSidebar();
  49. });
  50. // Sigeom
  51. Potree.loadPointCloud("../pointclouds/vol_total/cloud.js", "sigeom.sa", function(e){
  52. let scene = viewer.scene;
  53. scene.addPointCloud(e.pointcloud);
  54. let material = e.pointcloud.material;
  55. material.size = 1;
  56. material.pointSizeType = Potree.PointSizeType.ADAPTIVE;
  57. scene.view.position.set(589974.341, 231698.397, 986.146);
  58. scene.view.lookAt(new THREE.Vector3(589851.587, 231428.213, 715.634));
  59. // viewer.fitToScreen();
  60. });
  61. var loader = new PLYLoader();
  62. loader.load( Potree.resourcePath + "/models/stanford_bunny_reduced.ply", (geometry) => {
  63. geometry.computeVertexNormals();
  64. // place three instances of this bunny into the scene
  65. let mesh1;
  66. {
  67. let material = new THREE.MeshNormalMaterial();
  68. mesh1 = new THREE.Mesh( geometry, material );
  69. mesh1.position.set(589951.587, 231428.213, 710.634);
  70. mesh1.scale.multiplyScalar(500);
  71. mesh1.rotation.set(Math.PI / 2, Math.PI, 0)
  72. viewer.scene.scene.add(mesh1);
  73. }
  74. let mesh2;
  75. {
  76. let material = new THREE.MeshStandardMaterial( {
  77. color: 0x0055ff,
  78. flatShading: true,
  79. metalness: 0.2} );
  80. mesh2 = new THREE.Mesh( geometry, material );
  81. mesh2.position.set(589851.587, 231348.213, 720.634);
  82. mesh2.scale.multiplyScalar(500);
  83. mesh2.rotation.set(Math.PI / 2, Math.PI, 0)
  84. viewer.scene.scene.add(mesh2);
  85. }
  86. let mesh3;
  87. {
  88. let material = new THREE.MeshPhysicalMaterial( {
  89. color: 0x226666,
  90. metalness: 0,
  91. roughness: 0.5,
  92. reflectivity: 1.0
  93. } );
  94. mesh3 = new THREE.Mesh( geometry, material );
  95. mesh3.position.set(589751.587, 231428.213, 725.634);
  96. mesh3.scale.multiplyScalar(500);
  97. mesh3.rotation.set(Math.PI / 2, Math.PI, 0)
  98. viewer.scene.scene.add(mesh3);
  99. }
  100. viewer.onGUILoaded(() => {
  101. // Add entries to object list in sidebar
  102. let tree = $(`#jstree_scene`);
  103. let parentNode = "other";
  104. let bunny1ID = tree.jstree('create_node', parentNode, {
  105. "text": "Bunny 1",
  106. "icon": `${Potree.resourcePath}/icons/triangle.svg`,
  107. "data": mesh1
  108. },
  109. "last", false, false);
  110. tree.jstree(mesh1.visible ? "check_node" : "uncheck_node", bunny1ID);
  111. let bunny2ID = tree.jstree('create_node', parentNode, {
  112. "text": "Bunny 2",
  113. "icon": `${Potree.resourcePath}/icons/triangle.svg`,
  114. "data": mesh2
  115. },
  116. "last", false, false);
  117. tree.jstree(mesh2.visible ? "check_node" : "uncheck_node", bunny2ID);
  118. let bunny3ID = tree.jstree('create_node', parentNode, {
  119. "text": "Bunny 3",
  120. "icon": `${Potree.resourcePath}/icons/triangle.svg`,
  121. "data": mesh3
  122. },
  123. "last", false, false);
  124. tree.jstree(mesh3.visible ? "check_node" : "uncheck_node", bunny3ID);
  125. });
  126. });
  127. {
  128. let manager = new THREE.LoadingManager();
  129. manager.onProgress = function ( item, loaded, total ) {
  130. console.log( item, loaded, total );
  131. };
  132. let onProgress = function ( xhr ) {
  133. if ( xhr.lengthComputable ) {
  134. let percentComplete = xhr.loaded / xhr.total * 100;
  135. console.log( Math.round(percentComplete, 2) + '% downloaded' );
  136. }
  137. };
  138. let onError = function ( xhr ) {};
  139. const texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/textures/brick_pavement.jpg`);
  140. texture.wrapS = THREE.RepeatWrapping;
  141. texture.wrapT = THREE.RepeatWrapping;
  142. let loader = new OBJLoader( manager );
  143. loader.load(`${Potree.resourcePath}/models/stanford_bunny_reduced.obj`, function ( object ) {
  144. object.traverse( function ( child ) {
  145. if ( child instanceof THREE.Mesh ) {
  146. child.material.map = texture;
  147. }
  148. } );
  149. object.position.set(589871.587, 231528.213, 725.634);
  150. object.scale.multiplyScalar(500);
  151. object.rotation.set(Math.PI / 2, Math.PI, 0)
  152. viewer.scene.scene.add( object );
  153. viewer.onGUILoaded(() => {
  154. // Add entries to object list in sidebar
  155. let tree = $(`#jstree_scene`);
  156. let parentNode = "other";
  157. let bunnyID = tree.jstree('create_node', parentNode, {
  158. text: "Bunny Textured",
  159. icon: `${Potree.resourcePath}/icons/triangle.svg`,
  160. data: object
  161. },
  162. "last", false, false);
  163. tree.jstree(object.visible ? "check_node" : "uncheck_node", bunnyID);
  164. //tree.jstree("open_node", parentNode);
  165. });
  166. }, onProgress, onError );
  167. }
  168. { // LIGHTS
  169. const directional = new THREE.DirectionalLight( 0xffffff, 1.0);
  170. directional.position.set( 10, 10, 10 );
  171. directional.lookAt(0, 0, 0);
  172. const ambient = new THREE.AmbientLight(0x555555);
  173. viewer.scene.scene.add(directional);
  174. viewer.scene.scene.add(ambient);
  175. }
  176. </script>
  177. </body>
  178. </html>