views:

356

answers:

4

I am a professional developer working mostly with Java but on my spare time i like to play around with different languages and libraries. The thing is that i want to start learning how to develop 3D enabled applications or games. There are alot of engines out there but im afraid that by using those directly i will fail to learn the basics of 3d development since they are so high level.

Should i start programming with a scene graph engine, a library like SDL or go straight towards working with opengl?

I do all development on linux but i want the things that i develop to be cross platform.

+2  A: 

I would start going with plain OpenGl. Do some basic scenes and start building your own "3D engine" from there. It is probably gonna be bad, since you will be learning and will have to manipulate by yourself a LOT of low level stuff. However, I think that's what you want to learn.

Don't create too complex things, I would go only to the basics, and after mastering that (I refer to matrix manipulations, camera, frustrum, occlusion, etc.) look at some 3D engines, to see how they implemented it. I would start using them at that time.

You need a simple toolkit to set up an OpenGL canvas. I recommend GLUT, which is old and VERY VERY simple. It will help you set a simple screen. Lower level than that will be unportable, and is going to be a little pain to create (Xorg calls? Sigh...). Lots of toolkit libraries have 3D canvas (QT, SDL, etc.). But the good point of GLUT is that it only creates your window, set up some functions and that's it.

A very nice 3D engine, which you might want to look after looking at the basics of OpenGL is Ogre. It is well programmed and simple to use.

Edison Gustavo Muenz
though I am opposed to the use of Singletons that exist throughout Ogre, as well as all the config files and plugins required to do anything. :-\ But I highly agree with starting with plain OpenGL.
Ricket
@Ricket yeah, I agree with you. However, it's a 3D engine, nothing more, nothing less. That's why I like it for learning. It was just a suggestion thou, there are other engines that could do the job pretty well too.
Edison Gustavo Muenz
+1  A: 

I started with OpenGL. There are plenty of tutorials available on the web, that besides teaching OpenGL per se, also allow you to learn lots of important stuff in 3d (game) development, such as appropriate scene illumination, and animation basics.

JG
+1  A: 

The basics of 3D development in terms of direct OpenGL access are a rapidly changing target. Prepare yourself for having to learn about new features every few months. After years of stagnation, three OpenGL standards have been published over the last year, each of which comes with important changes. This can be enjoyable, but it takes a lot of effort to follow.

If you just want to have a look on how thing used to work for a long time, go for the OpenGL 2.0 specification. It's here to stay, at least for a few more years. OpenGL 3.0 introduces all changes in a separate context, and NVIDIA committed itself not to drop old features. You won't be competitive, but you have a stable platform for your spare time.

If you consider OpenGL as a means to an end, you might prefer higher level libraries which do all the dirty work for you. The "other" basics of 3D graphics, namely vectors, matrices, quaternions (and so on) also appear on this level. You just don't have to know how to pass them efficiently to the GPU. If you go for higher level 3D graphics, you can concentrate on the stuff that stays the same across all APIs (OpenGL, OpenGL ES, Direct3D) and technologies (scanline rasterization, raytracing).

So in the end, it's up to you to decide what you would like to do with your spare time. Both paths are interesting, there's no inherent "better" way if there's no fixed goal.

Malte Clasen
Thanx for the reply. I guess its the same as with most modern software technologies. It takes alot of time to keep up but its fun to try.
Per Arneng
A: 

i can suggest you OpenSceneGraph and c++

or maybe Delta3D. it is a OpenSceneGraph based library

there is also Ogre but i did not use it..

ufukgun
or Irrlicht...
Ricket