Uszat

07-26-2008, 06:26 AM

Hello!!!

I have a problem with gluUnProject function.

The code:

GLint viewport[4];

GLdouble projection[16];

GLdouble modelview[16];

GLfloat winX, winY, winZ;

GLdouble posX, posY,posZ,posZ1,posZ2;

glGetIntegerv(GL_VIEWPORT, viewport);

glGetDoublev(GL_PROJECTION_MATRIX, projection);

glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

POINT mouse;

GetCursorPos(&mouse);

ScreenToClient(hwnd, &mouse);

winX = (float)mouse.x;

winY = (float)mouse.y;

winY = (float)viewport[3] - winY;

glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);

The problem is, that the coordinates of axes that are on the plane of monitor (for example X and Y) are good, but the coordinate of perpendicular axis (f.e Z)is not 0 but fRange or -fRange. fRange in my code, is the clipping plane from glOrtho. When I Rotate the view for example Y rotation -90 or 90 degrees, the coordinate of perpendicular to monitor plane axis X is fRange/-fRange not 0. When I use an isometric view the (0,0,0) point is not in the centre of the coordinate system but somewhere far away. I solve the problem for Z coordinate:

gluUnProject(winX, winY, 0, modelview, projection, viewport, &posX, &posY, &posZ1);

gluUnProject(winX, winY, 1, modelview, projection, viewport, &posX, &posY, &posZ2);

And when I have Z1 and Z2 I can calculate the proper Z value.

But what about rotations when my X or Y axis become a Z axis(perpendicular to monitor plane) then X and Y coordinates are not proper but fRange/-fRange (they are good only in front and back view).

I don't have any idea what is wrong. Please help me.

Thanks in advance!!!

PS. Sorry for my bad English, I hope this post is understandable.

I have a problem with gluUnProject function.

The code:

GLint viewport[4];

GLdouble projection[16];

GLdouble modelview[16];

GLfloat winX, winY, winZ;

GLdouble posX, posY,posZ,posZ1,posZ2;

glGetIntegerv(GL_VIEWPORT, viewport);

glGetDoublev(GL_PROJECTION_MATRIX, projection);

glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

POINT mouse;

GetCursorPos(&mouse);

ScreenToClient(hwnd, &mouse);

winX = (float)mouse.x;

winY = (float)mouse.y;

winY = (float)viewport[3] - winY;

glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);

The problem is, that the coordinates of axes that are on the plane of monitor (for example X and Y) are good, but the coordinate of perpendicular axis (f.e Z)is not 0 but fRange or -fRange. fRange in my code, is the clipping plane from glOrtho. When I Rotate the view for example Y rotation -90 or 90 degrees, the coordinate of perpendicular to monitor plane axis X is fRange/-fRange not 0. When I use an isometric view the (0,0,0) point is not in the centre of the coordinate system but somewhere far away. I solve the problem for Z coordinate:

gluUnProject(winX, winY, 0, modelview, projection, viewport, &posX, &posY, &posZ1);

gluUnProject(winX, winY, 1, modelview, projection, viewport, &posX, &posY, &posZ2);

And when I have Z1 and Z2 I can calculate the proper Z value.

But what about rotations when my X or Y axis become a Z axis(perpendicular to monitor plane) then X and Y coordinates are not proper but fRange/-fRange (they are good only in front and back view).

I don't have any idea what is wrong. Please help me.

Thanks in advance!!!

PS. Sorry for my bad English, I hope this post is understandable.