To main page | 3dengine.org
Center of Viewport
Center of viewport (or
camera center) is X,Y coordinates right in the middle of current
screen space in
OpenGL can be found as:
(viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2
where
viewport is the
viewport matrix that can be loaded via
glGetIntegerv call.
Why not (Width of window / 2) ?
There are some times that center of window isn't really center of "virtual camera", like when you are drawing
multiple views of the same
scene - there might be 2,3,4 or more "camera centers", each in the middle of it's respective viewport.
3D world coordinates
In real math,
C(x,y,z) = -R' * t , where ' is transpose
but remember about
column major ordering. R is
rotation matrix (modelview's upper left 3x3 matrix, transposed), t is translation 3x1 matrix (in terms of right-up-back vectors).
3D coordinates of current camera center in PyOpenGL
1 way:
gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2,
.... )
Another:
import numpy
buffer = glGetDoublev(GL_MODELVIEW_MATRIX) # [1]
cXYZ = -1 * numpy.mat(buffer[:3,:3]) * numpy.mat(buffer[3,:3]).T
[1]
Avoid glGetFloat in Python