PDA

View Full Version : Drawing 2D large scale and interactive graphs with openGL



Hatchi
04-01-2013, 05:37 AM
Dear all

I developed a software system currently using Qt 4.8.1 for drawing 2D graphs. Unfortunately already for 6500 nodes and 8000 links performance is terrible. Memory usage by Qt is 1.8 GB and rendering takes 10 seconds. I tried everything with Qt, optimization parameters, their built-in support for openGL etc. however nothing helped.

My question is the following: is openGL suitable for drawing graphs with up to 80000 nodes which are interactive (user should be able to click on them and after a click the graph will update dynamically) and using less memory while improving rendering speed?

Are you aware of existing projects trying to accomplish the same goal?

Kind regards
Hatchi

tonyo_au
04-01-2013, 06:05 AM
Yes - people here regularly render 5-10 millions objects but it does require a lot of thought to keep you OpenGL calls to a minimum - perferable below 1000 calls per frame. Of course you mayhave problems clicking on 1 node in 80,000 on a view since they will each only occupy a few pixels.

Aleksandar
04-03-2013, 01:25 PM
My question is the following: is openGL suitable for drawing graphs with up to 80000 nodes which are interactive (user should be able to click on them and after a click the graph will update dynamically) and using less memory while improving rendering speed?
OpenGL cannot render a graph! OpenGL can render only graphics primitives. A graph is a data-structure used to store some data and semantics built-in links between nodes. So, obviously you cannot render graph directly with OpenGL. You have to make your data-structure self-drawing, i.e. transform nodes and links to drawing primitives. All I said is obvious, but I had to say in order to answer to your question.

If you are using Qt and make for each node a QObject, then it is obvious why it doesn't work. They are too expensive.

On the other hand, you or anybody on the Earth cannot handle 80K nodes on the screen. How many are visible at the time? It is a common technique in the graphics to reduce drawing to just visible objects. By using some spatial-partitioning structure you could easily increase rendering speed for several orders of magnitude.