I don't know any tutorial without looking one up, but I can tell you that 2d in OpenGL is not very far from 3d.
First, by enabling the depth buffer, you can use layering regardless of render order(though semitransparency requires proper render order, and second, you can have fully 3d objects in a 2d appearance, if the view is not perspective(the further objects are the same size as the closer ones. PErspective is the more standard 3d, objects get smaller as they get farther away))
To do 2d graphics, use the vertex2* functions, or the vertex3* ones with the last coordinate set to 0.
OpenGL is more of a lower level graphics system, so you would probably end up writing a function to draw a textured quad from a spritesheet or something.
Something like this
Setup:
glEnable(GL_BLEND);//Unnessecary, unless you want to use semitransparency
glEnable(GL_TEXTURE_2D);//The only important line. Enables textures.
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//the/one of the better looking transparency modes, I think
(fancy transparency
(Texture loading excluded)
Drawing:
glBegin(GL_QUADS);
glTexCoord2f((0+t*32)/256.0,(0)/32.0);
glVertex3f((x-16)/200.0,(y)/200.0,z/1000.0);
glTexCoord2f((32+t*32)/256.0,(0)/32.0);
glVertex3f((x+16)/200.0,(y)/200.0,z/1000.0);
glTexCoord2f((32+t*32)/256.0,(32)/32.0);
glVertex3f((x+16)/200.0,(y+32)/200.0,(z)/1000.0);
glTexCoord2f((0+t*32)/256.0,(32)/32.0);
glVertex3f((x-16)/200.0,(y+32)/200.0,(z)/1000.0);
glEnd();
(That includes way too much unnessecary math, but is a real example from an isometric level engine I started today.)
Simplified:
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(-1,-1);
glTexCoord2f(1,0);
glVertex2f(1,-1);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(-1,1);
glEnd();
(Draws a single texture taking up the whole screen. Add some simple math in, and you can draw a fragment of the texture, with slightly more effort, a full 2d game)
One possibility is to render individual layers to single textures, so you can draw the background layer and the foreground layer each with a single quad. This might be faster, though generating/changing the texture likely wouldn't.