potree / potree Goto Github PK
View Code? Open in Web Editor NEWWebGL point cloud viewer for large datasets
Home Page: http://potree.org
License: Other
WebGL point cloud viewer for large datasets
Home Page: http://potree.org
License: Other
I know that part of the idea of using potree is that you don't need to mesh your points to surfaces. But there are still some reasons to use surfaces; for example if you want to have the user click on a surface to define a point (usually you handle this by calculating which mesh triangle is intersected by a ray from the camera).
So, my question is: could potree be adapted for meshes, so that the mesh first loads extremely simplified and then triangles are added? This seems mathematically more difficult than doing it with point clouds -- I'm not even sure if the same algorithms apply. It seems that Google Earth does something like this for when you zoom in on their 3D terrain.
The ply loader uses a WebWorker (src/loader/PlyLoaderWorker.js) to load a file in a parallel task.
This causes some problems:
A WebWorker task must be loaded from a file. It can't be packaged along with all the other source files.
var worker = new Worker('doWork.js');
The path to the WebWorker file must be specified relative to the html file. Up until now, html files were in the project root directory. If the html file is located in ./examples, the path to the WebWorker has to be adjusted accordingly.
Inside the WebWorker, the path to the file that should be loaded must be relative to the WebWorker file.
I'd say this is a low-priority task which I will handle once more important issues are fixed.
It'd be nice to get High Quality Splatting working again in the rewrite.
To provide keystroke navigation more intuitively, it might be best to follow keystrokes control navigation in the Google Earth 3D viewer (if possible).
See 3D viewer navigation manual: https://support.google.com/earth/answer/148115?hl=en
Would be nice to have:
Looking at the source a large amount of other Javascript libraries and script files is loaded, which brings up the questions, if ...
FilteredSplatsMaterial requires the OES_texture_float extension.
At the moment, this extension is loaded at startup, even if FilteredSplatsMaterial is not used. On some systems such as mobile phones or older hardware, OES_texture_float is not supported. If that's the case, potree will not work.
This behaviour should be changed so that OES_texture_float is loaded only if FilteredSplatsMaterial is used and if loading the extension fails, potree shoudl fall back to another material.
The goal is to make it work on mobile phones.
Similar to Javascript files create minified and not minified CSS with build tool.
This milestone contains high priority issues
Looking arbitrary at some source files, some files don't contain any license information and some still mention GPL.
A lot of pointclouds are scans of outdoor environments. Skyboxes would enhance the aesthetics a lot in this case.
Will implement this after #31
Would it be possible to turn potree into a loader for three.js?
Similar to the distance measure a "Profile Tool" could output the lateral cut along a line or rectangle.
Manualy translating a camera or scene node such that the data is within the view frustum can be cumbersome. A function that automaticaly translates the camera so that the whole object is at the center of the viewport would be nice.
camera.zoomTo(sceneNode)
camera.zoomTo(sceneNode, factor)
where factor is an optional parameter that defines the zoom level.
0: camera position = scene node position
1: camera position = nearest position such that the whole bounding box fits into the view frustum
0-1: somewhere in between
1: farther away from the object
If resources listed in cloud.js could be distributed and referenced with URL's, then data could be stored on Amazon S3 or other storage locations rather than a subdirectory.
{
"octreePath": "http://example.com/data",
...
I'm trying out something new. The threejs_plugin branch is a complete rewrite from scratch as a three.js based project. It looks promising and has the advantage that three.js comes with a lot of features. Basic octree loading already works. The next few important steps are:
Once those work, I might promote it to the develop or master branch.
Build separate files for libraries in libs
and Potree source in src
.
It's always difficult to keep the documentation in sync with the development.
It's also difficult to reflect changes between versions.
The best way to solve this issue is to use a documentation generator, which parses the relevant parts from the source files. In this case the source code and documentation are kept in the same file.
There are various documentation generators to choose from:
Other useful tools:
After using Potree Converter to convert a LAS or XYZ point cloud, the converted data is all black. Here is the command I use: C:\Users\phamax\Desktop\PotreeConverter_2014.05.30>potreeconverter.exe test.txt
-f xyzi -l 8 -r 65536 -o C:\potree_converts
The txt file is a XYZ file, where the fourth column is intensity. Values for intensity goes from 1 to 2194.
Is there anything I should do differently?
Thanks
Maxime
Having a Google Chrome tab with a potree model in it is using 37% of my cpu on a Thinkpad x200t running Kubuntu 13.10, after all points have loaded. I'm not giving any mouse or keyboard input. So, something very inefficient must be happening.
At the moment, I've made a change to the three.js version that comes with potree, to make the minimum size of points 2pixels. So, if you use the official three.js version, you'll end up with a different point size.
i have las file converted into potree after i render to localhost.. i find out that my potree data has no color.. is there way to fill up color? thanks to your answer..
Currently, near to view point data loading order seem to be later than far ones.
If it is possible to change loading octree data order from near to far,
loading performance will be faster, I think.
Move ./lion.html to ./examples and create some more examples such as
Similar to #21 a method to get the current location in Potree would be also useful.
It may return x/y/z and if there is other useful information.
I get the following error using 2905691 . I'm using node.js v0.10.26 and gulp 3.6.0 .
~/Downloads/potree$ gulp debug
[gulp] Using gulpfile /home/aaron/Downloads/potree/gulpfile.js
[gulp] Starting 'examples'...
[gulp] Finished 'examples' after 9.43 ms
[gulp] Starting 'scripts'...
[gulp] Finished 'scripts' after 39 ms
[gulp] Starting 'styles'...
[gulp] Starting 'docs'...
[gulp] Finished 'docs' after 4.37 ms
[gulp] Starting 'watch'...
[gulp] Finished 'watch' after 62 ms
[gulp] Starting 'serve'...
[gulp] Finished 'serve' after 5.06 ms
[gulp] Server started on 3000 port
[gulp] gulp-size: mjs.js 32.6 kB
[gulp] gulp-size: potree.js 168.95 kB
/home/aaron/Downloads/potree/node_modules/gulp-html-replace/lib/index.js:50
Object.keys(options).forEach(function (key) {
^
TypeError: Object.keys called on non-object
at Function.keys (native)
at getTasks (/home/aaron/Downloads/potree/node_modules/gulp-html-replace/lib/index.js:50:12)
at module.exports (/home/aaron/Downloads/potree/node_modules/gulp-html-replace/lib/index.js:7:17)
at Stream.<anonymous> (/home/aaron/Downloads/potree/gulpfile.js:133:11)
at Stream.EventEmitter.emit (events.js:92:17)
at end (/home/aaron/Downloads/potree/node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js:116:39)
at queueData (/home/aaron/Downloads/potree/node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js:62:17)
at queueData (/home/aaron/Downloads/potree/node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js:56:14)
at queueData (/home/aaron/Downloads/potree/node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js:56:14)
at queueData (/home/aaron/Downloads/potree/node_modules/gulp/node_modules/vinyl-fs/node_modules/map-stream/index.js:56:14)
enhancement clean up warning about xhr
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help http://xhr.spec.whatwg.org/
Developers must not pass false for the async argument when the JavaScript global environment is a document environment as it has detrimental effects to the end user's experience. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an InvalidAccessError exception when it occurs so the feature can eventually be removed from the platform.
Make a gulp build that creates a single minified source file.
I know this is a larger one, but in future, a integration with cesiumjs would be really cool for displaying point clouds that has geo coordinate systems.
It could be interesting to do automated testing for "develop" branch and then run builds with Travis CI: https://travis-ci.org/
Provide a Wiki page, which contains the specification of the data format required by the viewer (which can be prepared by the Potree Converter).
Add a version information to the data format, that the format can evolve over time without causing compatibility issues.
Eventually data format specification can be a separate repository, such as GeoJSON or MB-Tiles spec for example.
The build creates HTML files from Markdown source, but it currently doesn't include the images.
Let's merge current feature branches into "develop".
When I use mulit potree model in a scene, I wish i could release the point cloud. But I found that the memory will increase even I dispose the geometry and material.
scene.remove(this.infos[this.currentNodes[n]].pointCloud);
this.infos[this.currentNodes[n]].pointCloud.pcoGeometry.dispose();
this.infos[this.currentNodes[n]].pointCloud.material.dispose();
this.infos[this.currentNodes[n]].pointCloud = undefined;
adding this after #31 is done.
I'll use this to dump some papers/tutorials/etc that might be interesting to implement.
It'd be nice to be able to load and display any point cloud from the hard disk.
Cross domain security settings in all browsers prevent potree from loading arbitrary local files.
I can see 3 possible solutions:
Hi,
Love the demo using distance measuring. Try to use with my data but did not seem to work correctly. Here are my steps:
AABB:
min: [-76.6152, 39.2969, -15.823]
max: [-76.6135, 39.2985, 13.492]
size: [0.00163842, 0.00154115, 29.315]
reading examples/FusedLidar_Lidar34.las
1m points processed
duration: 20.264s
2m points processed
duration: 113.698s
722,679 points written
duration: 154.632s
closing writer
duration: 155.036s
Can you please tell me what had gone wrong with the above process? I suspect that my AABB box is not matching my data but don't know enough to fix anything.
Thanks,
Chi
The size of both should be the same, no matter how the scene is scaled and how far/close to the camera the measurement points are.
Find out why.
help! i used potree to convert my las file and i put it to potree, reources folder i tried to view my las file to potree but there's no display.. heres my command PotreeConverter.exe D:\lasmergefile\lasfile\data.las -s 0.5 -l 4 -o C:/potree_converted please help! thanks :)
Include a small webserver to be able to test the examples without having to install a server as Apache or Nginx.
This should also simplify development.
Add a function, which allows to set the current location, which may consist of
According to firefox profiler, ~13% of the time is spent on
PointCloudOctree.update() -> computeTransformedBoundingBox() at 450 visible nodes.
Maybe it's better to transform the camera frustum to object space instead.
Also, camWorldPos should be computed outside the while loop.
To formalize releases one part is versioning.
"Semantic versioning" is a popular way to do this: http://semver.org/
Git and Github also make it easy to publish releases, if it follows some simple rules: https://help.github.com/categories/releases/
This shader renders a pointcloud in multiple passes into different render targets that do now know about the main FBOs depth buffer. It may not even possible to retrieve and use it. (maybe it is possible with the EXT_depth_texture extension?)
The EXT_frag_depth extension could be used to set the fragment depth during the last pass, when the result is rendered back into the main FBO. This would work and be easy to implement, but unfortunately it is a draft extension and according to webglstats.com, no one supports it, yet.
Right now it's necessary to run initially <script type="text/javascript" >Potree.importScripts("..");</script>
.
It would be better, if Potree.js would be more modular, that can load the library in different ways:
The old version of OpenLayers uses this approach:
https://github.com/openlayers/openlayers/blob/master/lib/OpenLayers.js
Then later there would be a reference to the library and Potree could be initialized like
<script type="text/javascript" src="../src/Potree.js"></script>
<script type="text/javascript">
function init() {
var potree = new Potree.init(canvas, {
<options>
});
potree.setLocation({
lat: 45.0,
lon: 135.0
....
});
...
}
...
The easiest and fastest way to provide documentation should be using the Github Wiki.
Difficult to track with this approach are changes of the documentation from one version to another, so o the long term it might better to use documentation included in the repository and deployed for example using Github Pages.
When you run "gulp test" the Javascript test library will return a lot of errors/warnings.
These errors/warnings are mostly:
!=
instead of !==
, as well as ==
instead of ===
So most of them are pretty easy to solve to get rid of the test errors and warnings, which would make the test tool a lot more useful.
The Umlaute warning obviously comes through your family name ;-)
Is it OK to rename it to "ue", or is it better to use "ü"?
I already saw that in fact the concatenation returns bad characters as Sch�tz
.
I added the BSD license text also to the Javascript builds, when I realized that "your" BSD license text contains a paragraph (the last one), which seems to be "FreeBSD" specific.
Isn't BSD 2-clause the correct licence? I think it's a common one.
http://opensource.org/licenses/BSD-2-Clause
Here the license text you probably took:
https://www.freebsd.org/copyright/freebsd-license.html
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.