We prepared a little test project (VS 2010, C++, OpenGl, Freeglut, Glew) to publish our solution to the following main requirements:
-
Rendering 100000+ objects at the same time, each one of those independently accessible/seleccionable to be able to change their properties.
-
The objects are of a certain type that defines their general shape and properties, which is also changeable during execution.
-
Use OF VBOs, Shaders, OpenGl 3.3
-
Should work on low-level graphic cards.
This is a very simplified version of our actual project, we are aware of some general methods to improve overall performance such as rendering only the visible objects and not those which are temporarily outside of your frustum.
For this example we took those techniques and other features out to make it smaller and easier to understand.
But please don’t hold back with anything that comes to your mind and works for you, we might as well have missed something obvious.
Any constructive criticism, feedback and/or information, tips to improve the performance are welcome.
On our computers (Intel i7-2600, CPU @ 3.40, Ge Force GT 220) we render 100000 objects at about 6-8 frames/sec.
1000000 objects at 3 frames/sec.
It would be nice to improve the performance to get close to 20-25 frames/sec, although it might simply not be possible.
General Info:
Use your left mouse button to rotate the camera and A, D, W, S to move it to the left, right, up or down.
EDIT: What we are looking is a way to improve the performance. Is our approach a proper way to render 100000 objects? We tested a lot of different ways and the reason why we chose this solution is because it gave us the best overall performance, but as I said, maybe we missed the obvious and did not use the “standard” OpenGL way of solving this problem. We could not really find a lot information about a project where the requirements were to render this amount of objects.