Sorry for the confusion. What I meant was that, by guessing, JPCT is using gluPerspective (uses FOV) for camera view instead of glFrustum. I have experience in using glFrustum, but I haven't tried the one with FOV before. Since the vertical FOV is adjusted automatically, perhaps that is the cause of incorrect position?
I tried reproject2D3DWS to place object at fixed location, by doing the following:
SimpleVector tempVec = Interact2D.reproject2D3DWS(camera, buffer, x, y).normalize();
float ratio = tempVec.z / 50f;
float vx = tempVec.x / ratio;
float vy = tempVec.y / ratio;
float vz = tempVec.z / ratio;
SimpleVector v3 = new SimpleVector(vx, vy, vz);
object.translate(v3.x, v3.y, 0);
The reason I divide the 50f is that I set the camera move out for 50f from origin. I use the normalized vector to find coordinates at the origin along the vector from the camera. In S2, the object is properly aligned at the bottom of the screen, but when I put it in S3 which has bigger screen, the object hanged in the middle and does not align to the bottom.
Am I doing it right or I missed anything?