Посмотрел статью, переписал под LWJGL. Что-то работает не корректно.
Матрица проекции
Код
////////////////////////////////////
camera.SetProjection(90, 0.1f, 8);
/////////////////////////////
  public void SetProjection(float angle, float nearPlace, float farPlace)
    {
        float aspectRatio = (float)Display.getWidth() / (float)Display.getHeight();
        float y_scale = (float)(1f / Math.tan(Math.toRadians(angle / 2f))) * aspectRatio;
        float x_scale = y_scale / aspectRatio;
        float frustum_length = farPlace - nearPlace;
        
        Projection.m00 = x_scale;
        Projection.m11 = y_scale;
        Projection.m22 = -((farPlace + nearPlace) / frustum_length);
        Projection.m23 = -1;
        Projection.m32 = -((2 * nearPlace * farPlace) / frustum_length);
        Projection.m33 = 0;
        
    }
Матрица вида
Код
camera.rx = 90;
camera.y = 8;
camera.SetView();
////////////////////////////////////////
public void SetView()
    {
        View.setIdentity();
        Matrix4f.rotate((float)Math.toRadians(rx), new Vector3f(1,0,0), View, View);
        Matrix4f.rotate((float)Math.toRadians(ry), new Vector3f(0,1,0), View, View);
        Matrix4f.rotate((float)Math.toRadians(rz), new Vector3f(0,0,1), View, View);
        Matrix4f.translate(new Vector3f(-x,-y,z), View, View);
    }
Код
  public static Vector4f UnProject(Camera cam, Point2f pos)
    {
     
    Matrix4f VPinvert = new Matrix4f();
    Vector4f Res = new Vector4f();
    
    float winZ = 1;
    
    float x = Main.Zoom;
    
    Res.x =(2.0f*((float)(pos.x-0)/(Display.getWidth()-0)))-1.0f;
    Res.y =1.0f-(2.0f*((float)(pos.y-0)/(Display.getHeight()-0)));
//   Res.z = (float)(2.0 * winZ -1.0);
  Res.z = 1;
    Res.w = (float) 1.0;      
    
    Matrix4f.mul(cam.View, cam.Projection, VPinvert);
    Matrix4f.invert(VPinvert, VPinvert);
    
    Res.x = (Res.x * VPinvert.m00) + (Res.y * VPinvert.m10) + (Res.z * VPinvert.m20) + (Res.w * VPinvert.m30);
    Res.y = (Res.x * VPinvert.m01) + (Res.y * VPinvert.m11) + (Res.z * VPinvert.m21) + (Res.w * VPinvert.m31);
    Res.z = (Res.x * VPinvert.m02) + (Res.y * VPinvert.m12) + (Res.z * VPinvert.m22) + (Res.w * VPinvert.m32);
    Res.w = (Res.x * VPinvert.m03) + (Res.y * VPinvert.m13) + (Res.z * VPinvert.m23) + (Res.w * VPinvert.m33);    
    
    Res.x /= Res.w;
    Res.y /= Res.w;
    Res.z /= Res.w;
    
    return Res;
        
    }
Нажима на точку с координатами (1,1), получаю значения (0.004219624;0.16776733;-0.033905927;29.493368)
В чём проблема ?
 