Hi All,
As you all know if you have the model close to the origin you see it perfectly:
But when it is very far from the origin you see it like:
This issue can be easily fixed doing:
glMatrix(PROJECTION);
glLoadIdentity();
glPerspective(...);
glMatrix(MODELVIEW);
glLoadIdentity();
>>>>>>>>>>>>>> glTranslate(-1000000, -1000000, 0) // moves the model onto the origin
gluLookAt(...);
But what happen when you do screen to client conversion like:
gluUnProject(mousePos.X, height - mousePos.Y, 0, modelViewMatrix, projectionMatrix, viewport, P0.X, P0.Y, P0.Z);
gluUnProject(mousePos.X, height - mousePos.Y, 1, modelViewMatrix, projectionMatrix, viewport, P1.X, P1.Y, P1.Z);
intPoint = LinePlaneIntersection(P0, P1, planeEquation)
We get the wrong 3D point right?
Shall we use the following solution or a better/more accurate approach exists?
gluUnProject(mousePos.X, height - mousePos.Y, 0, modelViewMatrix, projectionMatrix, viewport, P0.X, P0.Y, P0.Z);
gluUnProject(mousePos.X, height - mousePos.Y, 1, modelViewMatrix, projectionMatrix, viewport, P1.X, P1.Y, P1.Z);
intPoint = LinePlaneIntersection(P0, P1, planeEquation)
intPoint.X += 1000000; // moves the 3D point back to the actual position
intPoint.Y += 1000000;
Thanks,
Alberto