Comments (3)
You are right, there is no real (projection) based 3D rendering in chart-fx. We added a MultiDimDataSet with the 11.1.3 release, which could hold xyz-data like your matlab sample.
Then there's MountainRangeRenderer and ContourDataSetRenderer (and HistoryRenderer kind of also fits here) but they work on data points on a cartesian grid (xmesh, ymesz, zz in matlab notation I believe). Originally this was covered by the DataSet3D interface, but now we only require a DataSet with matching sizes on the first 3 dimensions.
I suppose this could be implemented similar to the PolarPlot, which also does a transformation and has its own custom axes. Interactive features like zooming/panning would probably need a lot of additional work or a completely different implementation (They are not usable for PolarPlots at the moment).
Another concern is performance, which for more complex 3D data will probably become a problem. There where recent developments around the BufferedImage API, but we did not find a good way to exploit that for chart-fx, yet.
from chart-fx.
@ennerf thanks again for your faithful testing and quick and constructive bug and feature reports.
A bit of context from our side: plotting 3D is also a strategic goal for us and the DataSet interface -- which we maintain internally both for Java/C++ -- should also be flexible enough to handle this. As @wirew0rm mentioned, we may need to iterate on the specific 3D data storage example implementation as there are many different ways to do this and we want to minimise copying of data (ideally zero-copy) which has high penalties in Java (boxing/unboxing issues, lack of templates, ...) prior to being able to plot the data.
The existing specific implementation work for most applications that are less demanding in terms of data size and rates but especially for 3D high-performance use-cases/users we expected that people will use directly the DataSet interface wrapper as most of these users will have already other data formats to store their 3D data. Thus in terms of interface, chart-fx should be fine.
However, the main issue I am struggling -- and the primary reasons why there isn't a XYZChart or 3DChart (the MountainRangeRenderer and ContourDataSetRenderer provide 3D->2D projections only) -- is for me to find a performant, reliable and maintainable 3D backend rendering engine for/in JavaFX that -- beyond the very simple examples -- can handle the typical amount of data and update rates found in test & instrumentation. For the earlier Swing-based ('JDataViewer') iteration we used JOGL as an augmentation, made a prototype implementation but the support was a bit flaky and one of the issues with JOGL is the platform supportability (it's based internally on JNI and OS/HW specific C libraries). Since iOS moved away from OpenGL and Windows prefers DirectX this becomes more of a low-level HW/driver issue... if necessary/useful, one could write something custom or add to the JavaFX eco-system but the reward/effort ratio isn't great these days especially since there are other tools that already solved this.
@ennerf your thoughts on this would be appreciated. Btw. may we get in contact with you directly? For an external user, you seem to track our developments quite tightly. Maybe we can bring you into the fold. 😁
from chart-fx.
Our use cases for 3D are a bit different from 2D and don't require the same update rates. We would typically do one of:
(1) show a full 3D representation of the physical system (e.g. .obj models) and update the transformations
(2) show data from a log file that would never need to update.
I have done some tests with Jzy3d (JOGL based) and FXyz (JavaFX based) years ago, and I think that the performance of JavaFX's built-in 3D engine should be good enough for at least these use cases. The most complex JavaFX 3D project I've seen so far is probably still Oracle's JavaOne Chess demo from 2013.
Jzy3d would have done everything we were looking for looking for, but we unfortunately also ran into too many issues with drivers and dependencies.
Sure, I'd like to be more involved. I've contacted you on LinkedIn. We can figure out contact details there.
from chart-fx.
Related Issues (20)
- Listener to react on mouse clicks on data points HOT 1
- Auto Ranging is doing unpredictable things HOT 2
- Application does not exit with chartfx HOT 4
- getXValues/getYValues returns extra values not included in the data HOT 2
- [10pt, 10pt]Restructure layout computations to make rendered output more consistent HOT 3
- If the dataset is round-trip, when i zoom the chart, the line will disapear. HOT 4
- Feature request (bug?) center handle position in HeatmapChart Pixels HOT 1
- Feature Request: allow explicit setting of axis' tick marks HOT 1
- Moving XYCharts to a new scene causes improper scaling between the axis and series/gridlines HOT 4
- DragResizerUtil dont resize on south HOT 1
- ShortTimeFourierTransform: Amplitude change with zero padding
- Customize color schema of XYChart HOT 2
- Axis display problem HOT 2
- Noob developer
- Change CachedDataPoints access modifier to public
- Notes for future work past 11.3 HOT 1
- Eclipse cannot handle 11.3.0 for some reason HOT 19
- Several questions about axis HOT 2
- The Zoomer plugin has some problems when using the mouse wheel HOT 2
- Fix usage of `renderer.getAxes` in `DataPointToolTip` and other plugins
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from chart-fx.