XB PointStream
Releases
A cross-browser JavaScript tool which will emulate Arius3D's PointStream viewer. It will be able to quickly render a large amount of point cloud data to the <canvas> tag using WebGL.
XBPS 0.1
XBPS 0.2
XBPS 0.3
XBPS 0.4
XBPS 0.4.5 [Only Lib | Full]
XB PointStream Dev Links
Development Resources
Parser Interface
/* Add an event listener to the parser. Once the event occurs, the parser will call the associated function and pass in a reference to itself. The parser needs to pass itself back to the library since the library could be working with many parsers simultaneously. @param {String} eventName - can be one of the following: "onstart" - must occur exactly once - func(parser) "onparse" - must occur one or many times - func(parser, {"VERTEX":[...], "COLOR":[...], etc...} "onfinish" - must occur exactly once - func(parser) "hook" - ? @param {Function} func - the function to call when the event occurs. */ addEventListener(eventName, func) /* Begins to load the resource @param {String} path - path to resource */ load(path) /* Get the version of this parser. @returns {String} parser version */ getVersion() /* Get the number of points which have been parsed. @returns {Number} the number of points parsed so far by the parser. */ getNumParsedPoints() /* Get the total number of points in the point cloud, including points which have not yet been parsed. @returns {Number} the total number of points in the resource or -1 if unknown. */ getNumTotalPoints() /* Get the progress of the parser, how much it has parsed so far. @returns {Number} value from 0 to 1 or -1 if unknown. */ getProgress() /* The size of the resource in bytes. @returns {Number} the number of bytes in the resource or -1 if unknown. */ getFileSize()
/* This example only demonstrates syntax. It hasn't been tested. */ function startCallback(parser){ alert( "Using parser version: " + parser.getVersion(); } function parseCallback(parser){ parser.getProgress(); parser.getNumParsedPoints(); parser.getFileSize(); parser.getNumTotalPoints(); } function finishCallback(){ } var parser = new ASCParser(); parser.addEventListener("onstart", startCallback); parser.addEventListener("onparse", parseCallback); parser.addEventListener("onfinish", finishCallback); parser.load(somePath);
Performance Issue Ideas
- Spatially partition point cloud into Bounding volume hierarchy and do bounding volume frustum culling
- Do static rendering
- Render low LOD when rotating point cloud
- Push as much as we can to CPU and GPU
- Use progressive "mesh" optimization to render objects if they are far from the camera
- Allow user to control LOD
- Stream point cloud, dynamically create and merge bounding volumes
- Pre-create Bounding volume hierarchy