Hello, I am working on visualization applications for Finite Element Analysis (FEA) and am interested in information on efficiently rendering an FEA mesh. The issue is that there are generally on the order of 10 to 100s of thousands of finite elements that need to be rendered. However, many are completely occluded by the outer-most elements and really don’t need to be considered for rendering. Are there scene graphs or other methods that exist out there that handle this type of model efficiently?
Sorry, I don’t know but since no one is replying, here are my 0.02.
First of all, before caring about performance tell us what the target machine is and what rendering features you want to use.
Some years ago, I found out that a Pentium3-800Mhz+GeForce2 can handle over 100k vertices/frame if the only thing flying around are colors.
BTW, not sure you really need to get more than 10fps or so and this should be quite easy right now.
First: use vertex arrays.
Second: use indexed vertex arrays.
Third: compiled vertex arrays.
You can be quite sure this would run on every video card.
ARB_vertex_buffer (i don’t remember how it’s called right now) should be even faster but requires a different implementation.
What kind of system are you targeting?
It’s also important (on new hardware) to render from front to back, to take advantage of the massive fill rate savings of hierarchical Z testing.
Sure but doing so using a FEA is not really easy as it is doing in-game per-object sorting.
I have seen some FEAs here and there. They have no texturing and they don’t need to go on 300fps. They often have just colors. In this market, 10fps is often considered real time. By this point of view, there’s no point in optimizing too much.
You can get a HUGE performance boost by rendering only those polygons that represent a FEA-model surface. Just make a temporary array of triangles/polygons(or references to them) out of main data. The difference between the inner and outer polys is that the outer poly is included only in one single element of entire model. Though this could be a real PITA to find the right fast working algorithm to scan for those outer polys (think of it harder – and you’ll get it eventually )
Hope this helps.
Actually, I have already implemented an algorithm to get the ‘skin’ of the FEA elements. It is quick enough to allow hiding of elements (which requires a recalculation of the skin).
What I am really interested in is a spatial representation of the FEA elements that would allow for fast selection with the mouse cursor and possibly allow me to do ordered rendering (back-to-front or front-to-back). I have fiddled with things like octrees, which seem to be memory-intensive and not easily adaptable to models where elements can be modified/added/removed.
I have looked into some of the scene graphs that are out there. The downside of these is that the code bases are quite large and require a long learning curve. Licensing issues also come into play.
As far as a target platform, it is mid-range Windows machines. The target OpenGL implementation is the standard MS software implementation (I believe it is OpenGL 1.1).