I am starting a research project and need to nail down a programming language and 3D graphics API where I will be creating an environment in the field of molecular cell biology where I will be simulating a large range of experiments in silico. This will be an ongoing project which will keep expanding and growing in size. The experiments will be done in discrete time and will encompass a complex physics engine. Pretty graphics are not of importance nor is is audio. I run Ubuntu and this is the environment I will be developing in.

The pairs I have investigated thus far are:

java : flexible,scalable,lib/dependency organization (maven),oo

  • jogl: full control of graphics
  • jMonkeyEngine: full game library, includes jBullet, maybe a bit overkill for what I need.

c++ : High speed, low level, oo

  • opengl:full control of graphics
  • maya:built in physics engine, infrastructure already in place, proprietary, not free

matlab : Heavily math based, but difficult to maintain and scale

  • simulink : proprietary, not free

I am least familiar with Maya but it was suggested to me by a friend as a good approach. When would Maya be a good solution and would it be a good selection for this type of case? Just as thinking jMonkey would be overkill this is kinda my feeling on Maya.

Are there any other pairings I should investigate?

Also has anyone had any experience modifying an existing physics library and the flexibility or complexity of doing so (ie Bullet, JBullet, jinngine)? Unsure at this point if I should start from scratch or try and modify/expand an existing one.

Any thoughts, feedback, input or any other suggestions would be greatly appreciated.


  • You should always clarify what OS(s) the program must run on. – GrandmasterB Feb 15 '12 at 19:04
  • Have you considered Mathematica? In an academic setting a site license may be available. – user1249 Feb 15 '12 at 21:14
  • Maya (assuming you mean the program from Autodesk) is primarily a 3D modelling and animating package; it has a physics engine in it for dynamics, but I'm not aware if that piece can be used seperately. I like maya, but I'd look for a dedicated simulation engine if graphics wasn't the primary concern; as it is, you'd end up with way too many features that you wouldn't even need. – Clockwork-Muse Feb 15 '12 at 22:26
  • @ThorbjørnRavnAndersen Thank you for the suggestion. I looked into it and although it has powerful analytical characteristics the built in laungauge itself would hold much of the same issues as coding in Matlab. Although they have an interface to call Java in there language and also have a Java API I think isn't elegant or as efficient as just using OpenGL. For example in the Java API you just call a .waitForAnswer() which blocks until a response is received from Mathematica. – wi1 Feb 16 '12 at 20:20
  • @X-Zero, Yea Autodesk Maya. I agree with you. There would probably be way to much extra that I would not need. However I wanted to investigate every possibility and I have friends trying to convince me that it is great for simulating. Just wanted to make sure I wasn't leaving something out that Maya does that may make everything much easier. – wi1 Feb 16 '12 at 20:23

First, what you are doing sounds as though it matches up VERY closely with Chandrajit Bajaj's (bajaj@cs.utexas.edu) research work in computational biology and molecular visualization. Bounce an email off of him and see what suggestions he has. (I suspect he will say C++ and OpenGL.) (Full Disclosure: During a period of refresher work while between jobs, I took the undergrad computer graphics class from him. I learned quite a bit and had a great time.)

Also, Jim Browne (browne@cs.utexas.edu) did his very early work in computational physics, and might have some valuable insights. I think Jim is retired now, and he may not answer the email. (Full Disclosure: I took a graduate operating systems class from him, and learned a LOT. He is, PERSONALLY, the reason UT Austin first built their Computer Science department. It was establish the department or lose him to Queen's University of Belfast.)

Second, whenever some describes something as "expensive", you should ALWAYS ask "Compared to what?" MATLAB is dirt-cheap compared to what it would cost you to develop and debug all their code from scratch.

Third, if interactivity is not a big deal, it is not that hard to rig a C++ program to write a file that can then be fed to MATLAB for intense number-crunching. During the aforementioned refresher work, I repeated the undergrad introductory numerical methods class. We crunched numbers in C++ and plotted results with MATLAB. (I had a LOT of fun in that class!) That was with Todd Arbogast (arbogast@ma.utexas.edu, I think). He is SHARP, and he might have some suggestions as well.

  • Oh man, thanks for the connections! I will definitely reached out to them.Mind if I reference that I obtained there email from you?Yes I agree that C++/OpenGL is probably the best option due to speed,control, flexibility, scalability but since I am a stronger Java programmer I was leaning towards Java/JOGL which I believe will be similar maybe just not as fast but I am not about to get into the batter of what language is better. Valid point about the cost of Matlab, I will update my post. However, user interaction will eventually need to be integrated so it probably isnt best for my app. – wi1 Feb 16 '12 at 20:31
  • Absolutely you can use my name! They're both great people, who genuinely enjoy passing knowledge along. – John R. Strohm Feb 20 '12 at 17:37

I am not a regular practitioner on this, but has been involved in development that begins with research (in Image/Video processing and related areas) and goes on towards deployment.

I would suggest don't rush into pro/cons analysis. There are two fundamental questions that will set your priorities straight.

1. How much likely (and you are willing) to throw away code?
If there is a sizable research involved, you will have tough time dealing with lower level language problems just to throw away every Monday morning. However, if there is already is a PoC (proof of concept) or prototypical in fornt, than your path is rather straight forward; you should avoid duplicate work.

2. What other elements you depend on?
You want be developing everything straight forward from scratch. Are there specific tool kits, APIs, frameworks you are going to use as dependency? If so, your choices are limited right here in

Your Answer

