A baffled beginner not quite sure where to start

Hey everyone :slight_smile:

First of all a minor introduction.

I’m not exactly a beginner when it comes to programming. First experience with programming was in a kind of odd language called DarkBasic back in the days. Anyways I’ve been using object-oriented languages for almost 3 years now (including C#, obj-c, Java, C, C++). Only reason I mentioned that is simply to state that I’m not a complete newbie when it comes to programming in general.

However, I am completely new when it comes to graphics programming with absolutely zero experience. I’ve decided that I want to start learning OpenGL by working a bit on a hobby project when I find spots of time.

The last few days I’ve been searching around for OpenGL introductory books and the like. I’ve seen quite a lot of mentions of the red book as well as the blue OpenGL superbible. Besides that I’ve been searching for articles and other beginner related material.

I have at this point decided that Java using the Lightweight java game library will be the learning platform of choice as this should be fairly up to date with OpenGL and provide other libraries such as windowing and input.

Unfortunately I think this have left me more confused than when I initially started looking. Here is my current worries and questions:

There seems to be a host of different opinions about whether to start learning OpenGL from 2.0 and below using the old fixed pipeline or from the approach of 3.3+ using purely shaders. My questions to this is:
I will slowly be working to build my own small 3D game to get into graphics programming. Will it hurt me a lot to learn OpenGL from the ground up and then switch to 3.3+ technology when I feel more comfortable in the field, or will it do more damage than good?

To this I have a related question:

I’ve seen a lot of people recommending going the 3.3+ way when learning, the only problem I’ve had with this is that the learning material for OpenGL seems shockingly appalling at the current time, especially for the newer technology. So much that it almost seems easier to start with older versions of the OpenGL superbible (such as the 4th edition), as the newer edition of the red book seems to be getting quite bad reviews. So where is a complete beginner to get the best chance at a start with OpenGL? Baffling considering OpenGL is so widely used.

So to summarize quickly:

[ul]
[li]Will it actually hurt a lot at later points to learn OpenGL from the ground up using older OpenGL technology, like 1.1 to 2.0? Or should I simply go the 3.3+ way?’
[/li][li]Learning material seems appalling at best (mostly outdated) or I simply haven’t looked enough. What learning material can you recommend for a complete beginner that is still relevant today?
[/li][/ul]

Thank you all for your time :slight_smile: I appreciate it a lot

I say at 3.3+ - hands down. Go here for a start. If you’ve got problems or questions concerning the tutorial, the author fellow board member Alfonse Reinheart is around. If you’ve got beginner’s questions go ahead and ask here. Books are nice and the SuperBible, IMHO, currently trumps the RedBook but the above tutorial is just as good, if not better, and is free and there’s nothing better than a good forum to ask questions. Also, we have a pretty solid Wiki.

If you really want to get into OpenGL, at some point you’ll have to get into the GL and GLSL specifications which you can grab here. Also, the API reference pages can be a great help. You can find them here. These pages are not the official reference but they are better maintained (also by Alfonse) and thus more bug free. Note that although these pages are for GL 4.3 core, they are still valid for GL 3.0+ core since every version since then has been forward compatible.

I agree with thokra but when you start on glsl have a look at an e-book called “OpenGl 4.0 shading language cookbook” - it has a lot of useful shaders ( I don’t think it has been updated to 4.3)

I say at 3.3+ - hands down. Go here for a start. If you’ve got problems or questions concerning the tutorial, the author fellow board member Alfonse Reinheart is around. If you’ve got beginner’s questions go ahead and ask here.

All right, cool :slight_smile: Just took a peek at the book as I’m at work right now, but looks really good! I will take a detailed read tonight. It is appreciated to feel welcome here at the OpenGL forum, I will be sure to ask for questions when in need.

The wiki looks like a great resource, too, once I’ve gotten a small start at OpenGL. It is bookmarked.

Thank you for the reply and links provided :slight_smile: Much appreciated!

I agree with thokra but when you start on glsl have a look at an e-book called “OpenGl 4.0 shading language cookbook” - it has a lot of useful shaders ( I don’t think it has been updated to 4.3)

Great! :slight_smile: I’ll be sure to give the book a look. Thank you for the help.

One additional question now that I think of it. How many graphics cards today only supports up to OpenGL 2.0? If I, say, write a game using 3.3+, I suppose I will have to write two kinds of rendering logic depending on what the GPU supports? That is, 3.3 would be purely based on shaders (from what I understand), while you would have to write rendering techniques using the old fashioned gl.Begin, gl.End and so on?

The simple answer is: Don’t write for GPUs that don’t support at least OpenGL 3.0 (DX10 class hardware). Valve’s hardware survey among Steam customers shows that less than 5% have non-DX10 class hardware so targeting a group of that size is simply a waste of time. BTW, anyone giving you an argument like “I won’t play (and maybe buy) your game unless it supports DX9 class GPUs” you can counter with: “Dude, a low-budget DX11 class GPU costs less than 50 bucks, so suck it.”

Makes a lot of sense :slight_smile: Would definitely be the best way to go then! I will dive into it and start out with 3.3+ right away :slight_smile: I know that the Lightweight Java Game Library have good support for the new OpenGL versions too, and additionally I actually found an open source project which converted the examples found at your provided link:
http://www.arcsynthesis.org/gltut/

To Java using the LWJGL, so that’s pretty neat!

So I think this combination will give me a great head start :slight_smile:

One thing you have to bare in mind: It may make sense to target Sandy Bridge and Ivy Bridge CPUs (which also integrate a GPU) and possibly multiple platforms. Sandy Bridge supports OpenGL 3.1 on Windows and Linux, Ivy Bridge currently supports 3.1 on Linux and 4.0 on Windows. However, at least on Linux you get a bunch of GL 3.2 and 3.3 ARB extensions already so writing an almost GL 3.3 compliant renderer for a capable Intel CPU isn’t impossible. One biggie is missing support for geometry shaders on Linux (and maybe Windows, don’t know right now). If you can live without that, you can write an almost compliant renderer using ARB extensions for at least three vendors (Intel, NVIDIA, AMD) on at least 2 PC platforms. On a Mac you get GL 3.2 max AFAIK - I’m only into real apples.

Aha interesting! Seems like I’ll have to take some care when planning out the platforms then, thanks for the headsup :slight_smile: I’ll have a lot of things to dig into now :smiley: