views:

201

answers:

6

I'm looking for some answers for a project I'm thinking of. I've searched and from what I understand (correct me if I'm wrong) the only way the program I want to make will work is through 3D application. Let me explain.

I plan to make a studio production program but it's unique in the fact that I want to be able to make it fluid. Let me explain. Imagine Microsoft's Surface program where you're able to touch and drag pictures across the screen. Instead of pictures I want them to be sound samples (wavs,mp3,etc). Of course instead the input will be with the mouse but if I ever do finish the project I would totally add touch screen input compatibility! Anyway, I'm guessing there's "physics" to do with it which is why I'm thinking that even though it'll be a 2D application I'll need to code it in a 3D environment.

Assuming that I'm correct in how I want to approach my project, where can I start learning about 3D programming? I actually come from PHP programming which will make C++ easier for me to learn. But I don't even know where to start. If I'm not wrong OpenGL is the most up to date API as far as I know.

Anyway, please give me your insights guys. I could really use some guidance here since I could totally be wrong in everything that I wrote :)

I would like to add that I'm most likely looking for tutorials, Linux 3D programming sites, source/demos (google failed me for the most part).

Note: I also understand this is not a project I'll finish in weeks, months and might take years. That's fine, I want to get C++ under my belt however long it takes. I'm just looking for opinions, sources, tutorials and things that might help me (as stated above).

A: 

You'll be interested in:

  • OpenGL (obviously)
  • Box2D (a 2D physics engine)
  • SDL (a portable media library)

You can find basic tutorials for them on the web. However, think if you really want to code in C++. The language is very powerful, but not easy to learn, and really hard to master. Wouldn't it be better to use a rapid development language like Python with PyGame?

Don't get me wrong -- I love C++ and it's my language of choice, but unless you're working on top-notch performance, operating systems or compilers, it may be overkill to learn C++'s up and downsides the hard way.

Kornel Kisielewicz
If an application needs to do 3D in realtime, that means at least twenty frames a second, which pretty much means you need to be programming for performance.
Crashworks
@Crashworks, believe me, I know. Yet unless you're trying to do realtime-radiosity offloading a part of the computation to the CPU, you don't need much sweat to maintain even 60fps on modern hardware -- Hell, you can even get decent framerate using JavaScript (sic!) -- http://code.google.com/p/quake2-gwt-port/.
Kornel Kisielewicz
+1  A: 

Coming from PHP won't make C++ any easier to you as riding a bicycle won't make driving a car easier.

Now, I think for Linux, your only choice is OpenGL as an API, and use any of the many wrappers, 3D programming frameworks, and what not available.

Maybe you can go into an easier language, like Python, and if there are OpenGL bindings (which I am pretty sure there is) you can use that, that would make the learning curve more easy and fast.

Francisco Soto
+1 for the illustrative C++ bicycle comparison xP. Python has nice bindings to OpenGL, SDL and other useful libraries via PyGame, see my answer :).
Kornel Kisielewicz
Not to mention there's also PyOpenGL, which pairs up perfectly with Pyglet. ;]
Xavier Ho
+1  A: 

Ogre, using OpenGL on Linux-based OSes, will save your life and time, compared to using OpenGL that is your sole alternative.

That said, to use Ogre, you'll have to know a fair amount of knowledge and practice in C++. And you will have to know about "graphic pipeline".

You can use C with OpenGL, that seem simpler, but it make you loos time by not providing higher abstraction of the graphic pipeline as Ogre does.

And almost all graphic engines are written in C++ anyway.

Now, if you try to learn C++, take a good book like "Accelerated C++", take a deep and long breath and please forget all you learnt about php before. Be humble in your search for knowledge and you'll get it faster.

Klaim
+1 for mentioning Ogre3D.
Thiago Silveira
Ogre3D should be fine, but take it from a guy who works with it professionally - there are some caveats depending on what you want to do with the application. You won't have much fun getting it to run on an iphone or anything. Ogre likes memory. It likes it so much that it likes to keep it all to itself. It's also ... not the fastest, to put it lightly. You can, however, speed it up somewhat by providing a custom memory allocator which has very good performance for lots of little allocations and deletions, but it'll still love that memory. ;)(inb4 getting downvoted for hating on Ogre)
arke
A: 

You need neither 3D graphics or a physics engine for this. The UI could even be done in a browser using some funky javascript.

However, the audio engine for something like this is going to be a pretty complex, performance-oriented beast, and is probably best done in C++ (or maybe OpenCL).

Finally, are you sure you're not reinventing Pure Data?

Andrew McGregor
A: 

I prefer Irrlicht as a lighter, easier-to-learn, but less feature-complete API than OGRE. It's literally possible to write a prototype in a few minutes in Irrlicht, and the code itself is easier to understand.

The best thing about it is that it would interface seamlessly with Irrklang, a sound library that may help you with your project.

Andrei Krotkov
+2  A: 

Hi, I don't know much about the MS Surface, but I'm a musician and multimedia artist working mostly with code, so... My advice is very much different - it doesn't matter if it's Irrlight, Orge, pure OpenGL or anything else. If you don't know much about 3D prgramming you'd better start with something different. There are several environments for artists to work with graphics, multimedia and code. Try one of them and watch the projects made in each of them on the project's websitees and on Vimeo. I think most of what you want to do is already done, but still can be very inspiring. The environments that come to my mind are:

  1. Processing - great prototyping environment by Ben Fry and Casey Reas. I use it always before coding anything serious as it provides me with all the multimedia and communication libraries i need, it's simple like hell and it's Java so you can easli deploy your apps after all! (As far as I remember there is touch surface library for Processing)

  2. openFramewoks - same as above but C++, but it's less clean and still under development. It's very easy to prototype in Processing and code finally in openFrameworks as the latter was very much influenced by the former. (The touch surface library is implemented for oF for sure)

  3. NodeBox - great and very powerful environment in Python. Has a very strange but great and intuitive (after all) GUI with some very unique methodolody of work!!

  4. SuperCollider is a wonderful sound processing and algorythimc composition programming language with a very easy to code GUI library and graphics API. It gives you everything you ever imagined about sound programming functionality.

  5. Pure Data - graphical approach toward programming. Made by Miller Puckett (the co-author of Max/MSP) with OpenGL (GEM extension) functionality provided by the guys from IEM in Austria.

Final good advice: Books!!! Programming Interaction (O'Reilly), a few books on Processing website, classic work - Computer graphics for Java programmers (great one, really!!). Read as well all the chapters about domain languages and domain knowladge in "97 things every programmer should know". It can really help!!

BTW: if you don't concider heavy real-time procedures thing about Java (Java2D, Java3D, JOGL) - it's millions times easier then C++ and Processing is actually Java, so you have a very good prototyping environment that can produce ready to use Java classes and applets. I used Processing in real-time theatre productions where stage movement was controlling the sound (syths and hardware samplers) all made in Processing, so this "heavy real-tme" means HEAVY real-time!!

If any further questions about this particular domain programming - don't hesitate to email me.