GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ,posXf, posYf, posZf;
Vector3 v;
glPushMatrix();
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
glPopMatrix();
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
gluUnProject( winX, winY, 0, modelview, projection, viewport, &posX, &posY, &posZ);
gluUnProject( winX, winY, .1, modelview, projection, viewport, &posXf, &posYf, &posZf);
//v.x=posX;
//v.y=posY;
v.x=-posZf/(posZ-posZf)*(posX-posXf)+posXf;
v.y=-posZf/(posZ-posZf)*(posY-posYf)+posYf;