To main page | 3dengine.org
Camera position in space (OpenGL)
Generally there's no such thing as "
camera position" in OpenGL, basically you start at point 0,0,0 looking down negative z-axis. (X-axis goes right, Y-axis goes up).
To see the world from (1,0,0), which is 1 unit right on x axis, you should move the camera right 1 unit, but you can't, because there is no such thing as "camera" position, so you have to "move" the whole WORLD 1 unit left.
This is done due to the fact, that world drawing process is simply matrix multiplication. The point in space is multiplied by 
projection matrix, by 
modelview matrix and then converted to 
screen space. So, in order to "see" the world from 1 unit RIGHT, you have to modify 
modelview matrix so that it would move every pixel 1 unit LEFT.
 Finding world coordinates of camera 
Use gluUnProject call with 
center of viewport and 0 as z-coordinate to find real-world center of the camera.
gluUnProject( 
  (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 
  0.0,  
  model, proj, view,  
  &cx,&cy,&cz 
)
cx,cy,cz would be the center of 
image plane, 
viewport is 
viewport matrix (See "Reading").
 Camera direction 
Finding "where" the camera looks is basically the same - use gluUnProject with 
center of viewport and 1.0 (instead of 0.0) as z-coordinate and use 
vector subtraction with the camera center (previous paragraph) to find the vector of where the camera is looking.
gluUnProject( 
  (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 
  1.0,  
  model, proj, view,  
  &cx1,&cy1,&cz1 
)
The vector (cx1-cx, cy1-cy, cz1-cz) would be the camera direction. Where cx,cy,cz is camera center (see "Finding world coordinates of camera" above).
Another approach would be 
extracting back vector from 
modelview matrix and inverting it.