In answer to you problem with rendering: do you mean you want 2d images to be displayed always facing the camera (as in perpendicular to it)? If so then I believe the technique is called "billboarding." The method I use involves getting the "up" and "left" camera directions from the viewing matrix, these are then also the up and left orientations of the images. For a square centre C(cx, cy, cz), size S, left direction L(lx, ly, lz) and up direction U(ux, uy, uz): the for corners are:
(C + 1/2(L) + 1/2(U) ),
(C - 1/2(L) + 1/2(U) ),
(C - 1/2(L) - 1/2(U) ),
(C + 1/2(L) - 1/2(U) )
I will not go into the maths of getting up and left directions from a viewing matrix but it is simple, typing "viewing matrix" into google and the first result gives the answer:
http://3dgep.com/?p=1700. The viewing matrix can be got in opengl using glGetFloat with GL_MODELVIEW_MATRIX.
As for mouse collision, opengl has support for a technique called selection or picking. The red book goes into it here:
http://glprogramming.com/red/chapter13.html. Essentially it involves clipping everything but a very small area around the mouse, drawing the geometry and recording what is not clipped.
If your still unsure after reading these articles, drop another question.