Giter Site home page Giter Site logo

gl-vis's Introduction

gl-vis

A modular visualization system for JavaScript.

gl-vis's People

Contributors

mikolalysenko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gl-vis's Issues

Contributing guides, package ideas

Hello everyone!

Related to plotly/plotly.js#949, I wonder what are priorities of gl-vis. Are there plans to rewrite components using regl and keep gl-vis regl-focused, or it is opened to various gl-* contributions?

I have some components which I would like to transfer and I believe gl-vis is the best place for them:

Also I have ideas for a couple of new gl-components to implement one day

  • gl-line for rendering lines/polygons in webgl, following this article, because now it is tough
  • gl-text for rendering any text in webgl with font texture generated in canvas2d, looking at font-texture-generator, which is supposedly going to be times smaller than text-cache

But the point is that these components are unlikely to be regl-based, and not sure they may come useful for plotly, therefore a question - is there any sense to put them here?

Personally I like this org a lot (except for I would elaborate some readmes and fix demos)

Thanks!

@mikolalysenko @bpostlethwaite @monfera @rreusser @etpinard @jackparmer

Roadmap

2D

High level goals:

  • More chart types (currently on scatter and line plots are implemented)
  • Add special cases for optimizing certain situations (for example, specialized rendering for time series data)

Missing chart types

  • Heatmaps
  • Contour lines
  • Bar charts
  • Networks

3D

  • Make everything work more like gl-plot2d
  • No partial updates, each call to .update() should reset the state of the object
  • Move validation and fancy argument parsing logic out of gl-plot3d
  • gl-plot3d should not own a canvas element and handle mouse events. Instead it should just a WebGL context and draw into that
  • 3D plots should use the same screenBox/viewBox/dataBox conventions as gl-plot2d
  • Each trace should keep a reference to the main gl-plot3d and use that to read out data like matrices, etc, rather than passing around all these ad-hoc parameters
  • Picking needs to work like 2D. The current system is dumb and uses too many passes. Instead we should give each object a pick offset and then use a binary search to locate the data point.
  • 3D plots should support both 2D and 3D overlays, similar to gl-plot2d. Spikes in 3D should be an overlay. Could also make some 3D selection tools
  • Mesh lighting sucks, needs a rework
  • Many 3D plots are too complicated, would be better off being split into separate cases: for example, we could factor out the contour rendering from surface plots with little loss
  • Some plots could be optimized for special cases. For example, scatter plots could use point sprites if we are rendering only circular markers.

Missing chart types

  • Volume graphics (can use ray marching for rendering, surface-nets for isosurface extraction)
  • 3D bar charts
  • Filled line charts

Layout engine

  • Create a higher level layout engine unifying gl-plot2d and gl-plot3d. This would handle subplots, positioning, mouse inputs and DOM interactions
  • From this, we need a lighter weight stand alone library for rendering plots
  • Maybe create a separate module for hover text and legends, abstracting out this common functionality into the rendering layer

plotly

Much of the development of gl-vis has been supported by plotly, and the 3D is a key chunk of the product. At a high level the current stack looks like this:

       [ data scientists/plotly customers ]
            |
            V
+----------------------(plotly)------------------------------------------+
| [ plotly language specific bindings (Python, MATLAB, etc.) ]
|           | translate language specific features, calls REST end points
|           |            
|           |      [ share plots ]
|           |            |
|           V            V
| [ plotly web service ]
|           | serves JSON objects
|           |            
|           |      [ embed plots in webpages ]
|           |            |
|           V            V
| [ plotly streambed ]
|           | parse feature rich JSON objects, turn into low level traces,
|           | axes calculations, clean up data, etc.
|           V
+------------------------------------------------------------------------+
            |
            |      [ advanced javascript users ]
            |            |
            V            V
+----------------------(gl-vis)------------------------------------------+
| [ TO BE WRITTEN LAYOUT ENGINE ]
|           | layout subplots, handle browser/DOM input, context creation/loss
|           V
| [ gl-plot2d, gl-plot3d ]
|           | coordinate drawing, picking, axes
|           V
| [ traces and overlays ]
|           | store/update buffers, draw stuff
|           V
+------------------------------------------------------------------------+
            |
            V
       [ stackgl ]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.