suggestions for a 3D graph rendering library? [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
Improve this questionSo I'm not sure how stackoverflow friendly this question is since it doesn't have a quick clear cut answer but here we go...
I have a java program that generates data for a directed graph. Now I need to render this graph. The data needs to be laid out in 3D, and I want to be able to define which plane an edge lives in. (Each edge will only need to occupy 1 plane of the 3D space). I also need the ability to navigate ar开发者_Python百科ound the graph. Since I know that this kind of stuff is hard, I'm going shopping.
So far I've looked into (In no particular order):
- JUNG: lacks 3D support
- Cytoscape: not sure how much I'll be able to define edge drawing, haven't seen a non bio-informatics application of it yet
- JGraph: I didn't see any 3D applications yet
- Perfuse: looks promising, does anyone know anything else about it?
- Gephi: Documentation looks scarce
- Processing: does this play well with java?
I'm also considering doing some combination of opengl + swing rendering to create a 3D graph from multiple 2D graphs.
I am also not adverse to the idea of linking from another language
Any Ideas? Thank you.
I would recommend using Java3D for the visualization part
Java 3D Tutorial Introduces the concepts
Download Site contains the libraries and a few demo projects, for a quick start.
To do the layout of your graph you could look for an algorithms in JUNG and check whether the can be easily extended to 3D.
JUNG layout demo
- A link collection on graph layouts
There are a few 3D graph visualizers out there.
The 3D viewers I know of are:
- UBIGraph - the demos page has some nice animations on it.
- Wilmascope - opensource and written in Java3D
Since wilmascope is opensource if the layouts don't suit you you could extend it to meet your requirements maybe. Laying out a graph in 3D is not easy however.
You could also take a look at Cuttlefish on sourceforge. There's a video on YouTube showing an example of it being used.
you might want to consider python. matplotlib from python. You will probably have to output your data to an intermediate format and run a python script on the data because matplotlib has cpython bindings, but the library have some great features for graphing and reporting.
take a look at Java vtk. vtk is a complex beast, but very powerful.
NAViGaTOR lets you fix nodes in different 3D planes. So if you fix the adjacent nodes of an edge in the same plane, then the corresponding edge will be in that plane too. However, it doesn't support directed edges - you'll just get an undirected representation of your graph.
I suggest you try http://code.google.com/p/jzy3d, which will really help you to do what you want. It's a java library for rapidly plotting surfaces, scatters and 3d primitives (spheres, lines, points, etc). Regards, Martin
VisAD
VisAD is a Java component library for interactive and collaborative visualization and analysis of numerical data. The name VisAD is an acronym for "Visualization for Algorithm Development". The system combines:
- The use of pure Java for platform independence and to support data sharing and real-time collaboration among geographically distributed users. Support for distributed computing is integrated at the lowest levels of the system using Java RMI distributed objects.
- A general mathematical data model that can be adapted to virtually any numerical data, that supports data sharing among different users, different data sources and different scientific disciplines, and that provides transparent access to data independent of storage format and location (i.e., memory, disk or remote). The data model has been adapted to netCDF, HDF-5, FITS, HDF-EOS, McIDAS, Vis5D, GIF, JPEG, TIFF, QuickTime, ASCII and many other file formats.
- A general display model that supports interactive 3-D, data fusion, multiple data views, direct manipulation, collaboration, and virtual reality. The display model has been adapted to Java3D and Java2D and used in an ImmersaDesk virtual reality display.
- Data analysis and computation integrated with visualization to support computational steering and other complex interaction modes.
- Support for two distinct communities: developers who create domain- specific systems based on VisAD, and users of those domain-specific systems. VisAD is designed to support a wide variety of user interfaces, ranging from simple data browser applets to complex applications that allow groups of scientists to collaboratively develop data analysis algorithms.
- Developer extensibility in as many ways as possible.
I've played with Processing and OpenGL last term. Not sure if drawing 2D planes is the best approach. But you can make certainly draw your graph points in 3d using Processing if you want to. Here is an applet from openprocessing.
We studied signal processing a bit and we used Octave and GNUPlot to plot signals in 2d(using plot, stem, etc.) and 3d(using mesh)
(source: network-theory.co.uk)
I've googled for java gnuplot and seemed to found some handy links...
Check out the Java links on GnuPlot Programming Interfaces, like: this,javaplot, jgnuplot, etc.
For some hardcore graphin' be it 2d or 3d, gnuplot seems to be a pretty powerful choice.
精彩评论