I’d like to get a discussion going on the use of rendering APIs.
Here’s some bg: I started looking for an OpenGL rendering framework/API for a CAD/FEM app about 6 months ago. I found the obvious choices: Hoops3D (too expensive), TGS (Open Inventor), Coin3D (Open Inventor) and OpenCascade. I settled on Coin3D.
Before using the API I had a decent amount of experience with OpenGL in C++. What I found was that I spent as much time learning the new API and trying to get it to do things that I knew were easy to do with straight OpenGL as I would have had I just created my own in-house API from scratch. Which is what I am doing now.
The API was good for RAD so in that respect I was happy with it and I think the Coin3D package is a good Windows OI implementation. However, I had to modify almost every “node” I used in Open Inventor and some things were just not available like printing and animation for a windows environment. The API also has no direct support for “rubber band” drawing so I had to modify a node to do this using straight OpenGL calls. I’m sure Open Inventor has a lot of happy users (and I’m sure I’ll catch hell for this) but it feels antiquated to me as it lacks many things that are just not unreasonable for a user to expect in an 3D App.
Maybe I’m not using the API in the way it was intended to be used but when I think of an API I think of a piece of software that will save me time/money by making tedious things easy and difficult things possible.
Has anyone had similar experiences with current APIs? Or, does anyone know of a better API for Windows that is not super expensive (Hoops)?
Have you looked at OSG ( Open Scene Graph )
I downloaded the demos and source a while back. Have you found this API to be better than the ones mentioned above?
One of the things I’m interested in is being able to derive a viewer from CView so that I am consistent with MFC. In OI you must use callback functions to capture events but I would prefer to use MFC messages. Only because that is more consistent with the rest of our code. I know that OI allows you to retrieve windows messages but the “viewers” don’t make it very easy.
Also, certain ports of OI have a huge memory leak in Windows which makes me weary of reference counting systems.
You may also want to look at OpenSG . Don’t confuse it with OpenSceneGraph.
Okay, I learn the hard way. OI in windows is a complete waste of time. This would have been really good to know about six months ago. I would say that for a commercial app where you must have absolute control over the window/interface details don’t use OI. Maybe everyone but me knows this but just in case there are others who are curious take note!
No wonder Hoops3D is so expensive, there seem to be no alternatives except OpenCascade which I have not used.
I have to disagree that there are no solutions except HOOPS.
Technically Open Inventor from Mercury (formerly TGS) provides the missing features that you mentioned: integrated with Win32 API, also integrated with MFC framework, supports printing, provides rubber band rect selection, etc.
It is not free, so may not meet your requirements on that point, but it is being used in many shipping products on Windows. I am, of course, biased.
Mercury Computer Systems (formerly TGS)
First of all, I understand that implementing OI on windows is not a trivial task. I don’t mean to disregard the effort that has been put into these packages or the care that is taken to maintain the code.
However, when I called for pricing on the Mercury OI implementation I did not get a straight answer. At first the quote was way too high for what we could afford. So the sales person starting lowering the price right over the phone!? Maybe this was just one particular distributor but he was not very professional.
Maybe TGS’s OI implementation is a significant improvement over what I am currently using but my experience with these windows OI implemenations has not been positive so far.
Sorry you had a bad experience with the sales guy.
I’m a technical guy myself and only wanted to flag the technical issue.
Good luck with your project.
Mercury Computer Systems
As an OIV customer (TGS/Mercury distribution), I thought I would add a few comments.
Overall, OIV is reasonably well performing. I haven’t found the need to extend many of the Mercury OIV nodes to hold our CAD/CAM animation data, and the callbacks have not been difficult to work with on Win32. (In fact, we haven’t had too much trouble integrating OIV with an antiquated XVT toolkit.) Our largest complaint is flexibility. With OIV, you can read .iv or .wrl files; no 3DS, DXF, etc. Some of the Hoops expense is it’s larger set of supported files for I/O. I’ve found that in many cases, OIV is slower than our in-house rendering engine that it was supposed to replace. So, we are considering another replacement.
I’ll second the flaky sales staff, but their Support and R&D staff are great! Their responses have always been quick, and complete.
Im using Open Inventor but i have a problem in clearing the texture buffer.
Im trying to load multiple texture using texture arrays
but unable to load it properly.
Can any one tell me how to clear the buffer(color and depth) using Inventor.
Hope u will reply me !!!
Thanks in advance
Use SoSceneManager.render() function with default arguments (1, 1).
You can get the scene manager from the viewer (such as SoQtExaminerViewer) by calling getSceneManager().