Hi everyone,
The 2.1 version has been released today with a lot of new features developed over the past
months!
2D charts improved
The layout of 2D charts is now much more accurate. The Y axis label is now vertical and legends can be displayed in the corners of the chart. Tutorials show how to create 2D charts for surfaces, scatters and lines. The great thing is that 2D remains a particular case of a 3D chart. In this regard, the next version will allow displaying XZ and YZ in addition to the existing XY dimensions. As for 3D, it supports rendering in GPU (JOGL), CPU (EmulGL/jGL), and can cope with HiDPI and non HiDPI monitors. |
Text rotation and scale
The new TextRenderer is able to rotate text. Axis labels can be parallel to an axis, not only horizontal or vertical. Text can also be kept visually the same size while switching from HiDPI to non HiDPI monitor. This helps keep the same chart layout and preserve readability of the chart. The TextRenderer supports all Unicode characters and all fonts made available by java.awt.Font. |
Displaying 3D contour
Displaying 3D contour required being able to address complex rendering issues with coplanar objects, which is now solved. The stencil buffer provided by OpenGL indeed allows dealing with Z-fighting situations where polygons override lines that are coplanar to it. |
Clipping
One can configure the scene graph with clipping planes, which allows ignoring any part standing outside of an area. It is especially useful to zoom on an area and avoid displaying the complete object standing outside of the expected bounds. BoundingBox3d clippingBox = new BoundingBox3d(...); chart.getScene().getGraph().setClipBox(clippingBox); |
Light support for volume visualization
Lights improve understanding the shape of a volume with uniform colors. Lights support more settings than before and can also be synchronized to the camera to always have a clear view of what stands in front of the viewer. |
More compatibility for GPU rendering
We now support Apple M1 for native charts. Native charts have been verified on MacOS 10, 11, Windows 10, Ubuntu 20, on Java 9, 14 and 17. We invested a lot on JOGL and provided a handy compatibility matrix that also provides a list of workarounds for failing situations. |
More performance for GPU rendering
VBOs have been improved to use faster buffers and also to allow sharing vertices among elements of a geometry. Multiple sharing schemes are available (see DrawableVBO2 documentation). |
More performance for CPU rendering
EmulGL, introduced at version 2.0, avoids a dependency to native OpenGL and GPU which may fail to work with some combinations of {OS, GPU, JDK}. Rendering in the CPU offers much better portability at the cost of performance when rendering a lot of polygons. ![]() In addition to the existing optimization tricks, a dynamic level of detail system is added to allow the API to select a coarser representation of an object when rotation is asked. The extreme case is the display of the bounding box instead of the object itself just during rotation. All is automatic and made to keep the most detailed representation that does not go beyond a target rendering time. |
More compatibility for CPU rendering
jGL has been ported to SWT, allowing to implement EmulGL for SWT in the next version. |
More testing
Github Actions allowed to create a build system able to run unit tests on macOS 10.15, macOS 11.4 (with M1), Ubuntu 20 and Windows 10, for JDK 9 and 14, running on real hardware (not virtual machines). ITTests (integration tests) in module jzy3d-tests-java9 allow verifying charts as they are displayed in various situations (Swing/GPU, AWT/GPU, AWT/CPU). Baseline images are generated per hardware since there are subtle differences in the images generated by each hardware. MTest (manual tests) allow verifying charts while they move from one monitor to another. |
Other
|