UNPKG

@cognite/potree-core

Version:

Potree wrapper for threejs applications

197 lines (137 loc) 6.22 kB
# Potree Core - This project is based on Potree V1.6. - Potree is a web based pouint cloud visualizer project created by Markus Schütz. - This project contains only the main parts of the potree project adapted to be more easily used as a independent library (I have only adapted code from the original repository). - Support for pointclouds from LAS, LAZ, Binary files and Grehound server. - Point clouds are automatically updated, frustum culling is used to avoid unnecessary updates (better update performance for multiple point clouds). - Supports logarithmic depth buffer (just by enabling it on the threejs renderer), useful for large scale visualization. ### How to use - Download the custom potree build from the build folder or add it to your project using NPM. - https://www.npmjs.com/package/potree-core - Include it alonside the worker folder in your project (can be found on the source folder). - Download threejs from github repository. - https://github.com/mrdoob/three.js/tree/dev/build - The build is a ES module, that can be imported to other projects, it assumes the existence of THREE namespace for threejs dependencies. ### Demo - Live demo at https://tentone.github.io/potree-core/ - Contains the same model multiple times stored in different formats. - Double click the models to raycast the scene and create marker points. <img src="https://raw.githubusercontent.com/tentone/potree-core/master/screenshot.png" width="700"> ### Example - Bellow its a fully functional example of how to use this wrapper to load potree point clouds to a THREE.js project ```javascript var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(60, 1, 0.1, 10000); var canvas = document.createElement("canvas"); canvas.style.position = "absolute"; canvas.style.top = "0px"; canvas.style.left = "0px"; canvas.style.width = "100%"; canvas.style.height = "100%"; document.body.appendChild(canvas); var renderer = new THREE.WebGLRenderer({canvas:canvas}); var geometry = new THREE.BoxGeometry(1, 1, 1); var material = new THREE.MeshBasicMaterial({color: 0x00ff00}); var cube = new THREE.Mesh(geometry, material); scene.add(cube); var controls = new THREE.OrbitControls(camera, canvas); camera.position.z = 10; var points = new Potree.Group(); points.setPointBudget(10000000) scene.add(points); Potree.loadPointCloud("data/test/cloud.js", name, function(data) { var pointcloud = data.pointcloud; points.add(pointcloud); }); function loop() { controls.update(); renderer.render(scene, camera); requestAnimationFrame(loop); }; loop(); document.body.onresize = function() { var width = window.innerWidth; var height = window.innerHeight; renderer.setSize(width, height); camera.aspect = width / height; camera.updateProjectionMatrix(); } document.body.onresize(); ``` ### API Reference - The project has no generated documentation but bellow are some of the main configuration elements. - A example can be found in the repository `index.html` file. ##### Potree.BasicGroup - Container that stores point cloud objects and updates them on render. - The container supports frustum culling using the point cloud bouding box. - Automatically stops updating the point cloud if out of view. - This container only support pointColorType set as RGB, pointSizeType set as FIXED and shape set as SQUARE. ##### Potree.Group - Complete container with support for all potree features. - Some features require support for the following GL extensions - EXT_frag_depth, WEBGL_depth_texture, OES_vertex_array_object ##### Potree.loadPointCloud - Method to load a point cloud database file - `Potree.loadPointCloud(url, name, onLoad)` ##### Potree.PointCloudMaterial - Material used by threejs to draw the point clouds, based on RawShaderMaterial - shape - Defines the shape used to draw points - Potree.PointShape.SQUARE - Potree.PointShape.CIRCLE - Potree.PointShape.PARABOLOID - pointSizeType - Defines how the point cloud points are sized, fixed mode keeps the same size, adaptive resizes points accordingly to their distance to the camera - Possible values are - Potree.PointSizeType.FIXED - Potree.PointSizeType.ATTENUATED - Potree.PointSizeType.ADAPTIVE - pointColorType - Defines how to color the drawn points - Possible values are - Potree.PointColorType.RGB - Potree.PointColorType.COLOR - Potree.PointColorType.DEPTH - Potree.PointColorType.HEIGHT - Potree.PointColorType.INTENSITY - Potree.PointColorType.INTENSITY_GRADIENT - Potree.PointColorType.LOD - Potree.PointColorType.POINT_INDEX - Potree.PointColorType.CLASSIFICATION - Potree.PointColorType.RETURN_NUMBER - Potree.PointColorType.SOURCE - Potree.PointColorType.NORMAL - Potree.PointColorType.PHONG - Potree.PointColorType.RGB_HEIGHT - logarithmicDepthBuffer - Set true to enable logarithmic depth buffer - weighted - If true points are drawn as weighted splats - treeType - Defines the type of point cloud tree being drawn by this material - This should be automatically defined by the loader - Potree.TreeType.OCTREE - Potree.TreeType.KDTREE - Potree.PointCloudTree - Base Object3D used to store and represent point cloud data. - These objects are created by the loader ### Notes - Since potree-core is mean to be used as library and not as a full software as potree some features are not available. - EDL shading is not supported by potree core (might be added later). - GUI elements were removed from the library - PotreeViewer - Controls, Input, GUI, Tools - Anotations, Actions, ProfileRequest - Potree.startQuery, Potree.endQuery and Potree.resolveQueries - Potree.timerQueries - Potree.MOUSE, Potree.CameraMode - PotreeRenderer, RepRenderer, Potree.Renderer - JQuery, TWEEN and Proj4 dependencies ### Building - The project can be build running the commands `npm install` and `npm run build`. ### Point Clouds - Use the Potree Converter tool to create point cloud data from LAS, ZLAS or BIN point cloud files - https://github.com/potree/PotreeConverter/releases