In the OpenGL 3+ Core profile, the fixed function pipeline is deprecated or removed. However, all drivers by default give compatibility profiles which still have glVertex, glBegin and friends. You won't get as much performance out of these old functions (which is why they were removed), but they still work. You may use "OpenGL 3" with these old ways, but you'd be essentially writing an OpenGL 2 program. OpenGL only adds things in later revisions.
That being said, shaders are a core part of modern rendering, and learning how to use the old fixed function pipeline is mostly a matter of understanding how to setup the data the way OpenGL expected it back in the day. If you follow a tutorial like this one, you should be set up with a basic framework that replicates most of the old OpenGL fixed-function pipeline. What that pipeline did was:
- Set up the appropriate matrices, using functions like
glRotate
, glTranslate
, and gluLookAt
. This part of the tutorial uses the glm
library to make this just as simple as OpenGL 2.
- Handle the transforms in the vertex shader. This is really rather simple. Using the common matrix setup, it is just
glVertex = projection * modelview * vertex
;
- Apply texturing/lighting automatically, assuming you set up everything correctly. Getting this to work is probably equivalent in difficultly to writing your own shaders and getting the textures & light data set up. This part explains lighting and this part explains textures.
The only tough part about shaders is that there is a lot of magic commands to get them compiled and the data for them loaded, but once you are through that boilerplate it really isn't that complicated.