New features in 2.0.0

2021, 20th March

EmulGL & refactoring of the drawing object model

A new CPU-based OpenGL renderer is born, providing an enhanced portability. Traditional GPU rendering offers great performance but sometimes hit a compatibility issue for some rare {OS, JDK, GPU} combination. EmulGL processes the 3D scene inside the JVM only with rendering time below 40ms for most surface and scatter charts. EmulGL uses jGL, a pure Java implementation of the OpenGL 1 specification. EmulGL remains relevant for simple charts. Native charts (using JOGL) remain the preferred option for fast rendering of very large geometries, volumes or rendering involving shaders.
Generalizing the framework to support multiple OpenGL libraries led to create the IPainter interface through which all drawable objects are drawn. See the repo readme for hints on refactoring your project from version 1.* to 2.0.

Chart tests

Making big changes in the framework required more test tools to ensure non regression.

  • Jzy3d is now built by Github CI rather than Travis CI.
  • Integration tests are based on pixel-wise comparison of chart to a baseline image. Note that these tests are still sensitive to thin differences between {JVM;OS} and are intended to be stable on my computer. These tests are not ran by Github CI.
  • Unit tests are based on mocks of the JOGL GL interface. Other mocks are built with Mockito.
  • A set of OpenGL debugging tools has been added to the library to investigate bugs of the library visually.

Volume charts

Viewing volume is now possible in Jzy3d thanks to a great contribution of Jacob Filik from Diamond Light Source. The below chart is demonstrated in the tutorial module.

Text customization

It is now possible to customize text renderers with any java.awt.Font

Fast sphere rendering

SphereVBO object allows rendering efficiently a high number of sphere, hence allowing to create 4D scatter plots.

Tutorials and documentation improvements

Tutorials have a better focus on portability demonstration (showing examples of AWT, SWT, Swing, EmulGL, etc). We also added examples of building 2D charts with Jzy3d.
The Developer Guide Example Code are already ported to Jzy3d 2.0 (the PDF Book will be updated soon). This may be usefull to you if you need lot of code examples for 2.0.
The readme files on the Github repo better explain how to use the framework and how it is built. Child modules will be better documented in the future.

Improvements in previous versions

The following features were not claimed through the usual download pages but remain tagged on github branches (maven build also deployed).

Jzy3d 1.0.2
  • Legends can be easily rendered with Java2D
  • LineStrip now supports stippling patterns to easily draw dotted or dashed lines
  • Squarifiers : Jacob Filik added multiple ways of scaling the chart inside the axis box
Jzy3d 1.0.1
  • Python binding
  • PLY format support
  • Waterfall plots (added by Jacob Filik)
  • SWT charts render better by using JOGL SWT Newt canvas instead of the former SWT/AWT bridges wrapped in AWT charts (added by Jacob Filik)

Downloading the jars

Jzy3d Maven repository

As of 2.0.0, Jzy3d artifacts have been splitted to be able to distinguish core java classes, native GL implementations, emulated GL implementation.
The jzy3d-api maven module disapear in favor of jzy-core and some other which are best documented here.

Manual download

You can download jars manually from the Maven repositories :