views:

72

answers:

2

Hi guys,

I've recently been tasked with the development of a multi-frame 3d point cloud visualization tool for research. The professor let me make the decisions on what tools to use for this project.

Problem is, I'm pretty much new to 3D rendering and the software packages for it. I was hoping that SO could point me in the right direction of what language to use what to learn to make this process as fast as possible.

The major decision right now is to decide whether to use straight C++ OpenGL calls or some kind of 3d toolkit like OpenSceneGraph. Also I'm having a hard time deciding between low level languages like C++ or going with something managed like Java and C#, or even a dynamic solution like Python with PyGame.

The main two priorities for this project are speed of development and running speed in both loading point clouds from disk and rendering them. They are fairly large, so I don't expect super high fps, but it'd be nice to have them as fast as possible.

Minor considerations include memory usage, and I guess fun of development :P (I like learning on the job, and the professor is okay with that since I'm an undergrad).

Thanks in advance

+1  A: 

Rather than going into low-level real-time graphics development, I would recommend to take a look at Mayavi. It's a stand-alone application dedicated to scientific visualization, written in python, based on VTK, with many parameters to visualize many sorts of data.

If you need to create a dedicated software, rather than using the standalone application, I would then recommend to build it using the traits framework from Enthought. The traits/traitsUI framework enables you to quickly create user interfaces. It can embed a mayavi scene and gives you access to everything you could do with the stand-alone mayavi application.

Getting all this running should be pretty painless using the Enthought Python Distribution (EPD). This is a python distribution that ships with a lot of packages useful for scientific computing (numpy, scipy, enthought.traits, mayavi, cython, ...). The 32bit version is free for all major platforms.

Installing EPD will not conflict with an existing python installation, you will just need to make your IDE point to the right directory.

sevas
+2  A: 

If you want to learn, I strongly suggest you write your own (I've wrote perhaps 4 or 5 of these, they're really easy). In particular, I recommend you start with something like the viewer in Szymon Rusinkiewicz's trimesh2 library: the code is as clear as it gets. It will be easy to adapt it to point clouds.

Rendering point clouds in OpenGL is trivial. With the size you're dealing with, you either use a vertex array if you expect your points to change dynamically, or go with the even simpler option of using OpenGL immediate mode and compiling a display list. Both of these will give you frame rates easily in the hundreds per second.

However, if speed of deployment is your priority, sevas is right: VTK has a vtkPointSource class which will do pretty much everything you want, while still working ok with reasonably large point clouds (say 1 million points or so).

Carlos Scheidegger
Thanks guys, I think I'll definitely look into Enthought's stuff. I've been meaning to learn numpy and scipy anyways as a matlab replacement. That said, opengl programming seems pretty interesting, and since I have around 2 weeks to mess around with it, I'll see if I can play around with the code.
Xzhsh