UNPKG

@sauskylark/potree

Version:

WebGL point cloud viewer

183 lines (144 loc) 5.79 kB
<!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"> <link rel="stylesheet" type="text/css" href="../libs/Cesium/Widgets/CesiumWidget/CesiumWidget.css"> </head> <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/Cesium/Cesium.js"></script> <!-- INCLUDE ADDITIONAL DEPENDENCIES HERE --> <!-- INCLUDE SETTINGS HERE --> <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 id="cesiumContainer" style="position: absolute; width: 100%; height: 100%; background-color:green"></div> </div> <div id="potree_sidebar_container"> </div> </div> <script type="module"> import * as THREE from "../libs/three.js/build/three.module.js"; window.cesiumViewer = new Cesium.Viewer('cesiumContainer', { useDefaultRenderLoop: false, animation: false, baseLayerPicker : false, fullscreenButton: false, geocoder: false, homeButton: false, infoBox: false, sceneModePicker: false, selectionIndicator: false, timeline: false, navigationHelpButton: false, imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}), terrainShadows: Cesium.ShadowMode.DISABLED, }); let cp = new Cesium.Cartesian3(4303414.154026048, 552161.235598733, 4660771.704035539); cesiumViewer.camera.setView({ destination : cp, orientation: { heading : 10, pitch : -Cesium.Math.PI_OVER_TWO * 0.5, roll : 0.0 } }); window.potreeViewer = new Potree.Viewer(document.getElementById("potree_render_area"), { useDefaultRenderLoop: false }); potreeViewer.setEDLEnabled(true); potreeViewer.setFOV(60); potreeViewer.setPointBudget(1_000_000); potreeViewer.setMinNodeSize(0); potreeViewer.loadSettingsFromURL(); potreeViewer.setBackground(null); potreeViewer.loadGUI(() => { potreeViewer.setLanguage('en'); $("#menu_appearance").next().show(); $("#menu_tools").next().show(); $("#menu_scene").next().show(); potreeViewer.toggleSidebar(); }); Potree.loadPointCloud("http://5.9.65.151/mschuetz/potree/resources/pointclouds/opentopography/CA13_1.4/cloud.js", "CA13", function(e){ let pointcloud = e.pointcloud; let scene = potreeViewer.scene; let material = pointcloud.material; scene.addPointCloud(pointcloud); material.size = 1; material.pointSizeType = Potree.PointSizeType.ADAPTIVE; potreeViewer.scene.view.setView( [689429.64, 3877023.77, 42878.97], [696072.86, 3916730.04, 82.04], ); let pointcloudProjection = e.pointcloud.projection; let mapProjection = proj4.defs("WGS84"); window.toMap = proj4(pointcloudProjection, mapProjection); window.toScene = proj4(mapProjection, pointcloudProjection); }); function loop(timestamp){ requestAnimationFrame(loop); potreeViewer.update(potreeViewer.clock.getDelta(), timestamp); potreeViewer.render(); if(window.toMap !== undefined){ { let camera = potreeViewer.scene.getActiveCamera(); let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld); let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld); let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld); let pTarget = potreeViewer.scene.view.getPivot(); let toCes = (pos) => { let xy = [pos.x, pos.y]; let height = pos.z; let deg = toMap.forward(xy); let cPos = Cesium.Cartesian3.fromDegrees(...deg, height); return cPos; }; let cPos = toCes(pPos); let cUpTarget = toCes(pUp); let cTarget = toCes(pTarget); let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3()); let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3()); cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3()); cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3()); cesiumViewer.camera.setView({ destination : cPos, orientation : { direction : cDir, up : cUp } }); let aspect = potreeViewer.scene.getActiveCamera().aspect; if(aspect < 1){ let fovy = Math.PI * (potreeViewer.scene.getActiveCamera().fov / 180); cesiumViewer.camera.frustum.fov = fovy; }else{ let fovy = Math.PI * (potreeViewer.scene.getActiveCamera().fov / 180); let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2 cesiumViewer.camera.frustum.fov = fovx; } } cesiumViewer.render(); } } requestAnimationFrame(loop); </script> </body> </html>