Всем привет. Вопрос в следующем. Имеется некий 2д объект, он расположен в диапазоне координат -1 до 1. В мировом пространстве он также располагается в этих координатах, но z смещен на -3 единицы.
Собственно инициализация матриц модели, вида и проекции:
   
    m_model.setToIdentity();
    m_view.setToIdentity();
    m_projection.setToIdentity();
    m_model.translate({0.0, 0.0, -3.0});
    m_projection.perspective(38.0, 1.0 * 640 / 480, 0.1, 100.0);
При щелчке по крайней правой границе моей окружности на экране я хочу получить ее координату, x = 1.0, так как r = 1.0.
Пробовал несколько способов, дающих один и тот же результат, но не совсем правильный для меня.
1) Ray picking:
        QMatrix4x4 mat = m_view * m_projection * m_model;
        QMatrix4x4 invMat = mat. inverted() ;
        //расчет нормализованных координат х, y, где был клик
        float pt_x = (p.x()/640)*2.0f - 1.0f;
        float pt_y = -(p.y()/480)*2.0f + 1.0f; 
        QVector4D nearPlane(pt_x,pt_y, -1.0, 1.0);
        QVector4D farPlane(pt_x, pt_y, 1.0, 1.0);
        QVector4D nearRes = invMat * nearPlane;
        QVector4D farRes = invMat * farPlane;
        nearRes /= nearRes.w();
        farRes /= farRes.w();
        QVector3D direc = QVector3D(farRes - nearRes);
        //результирующий вектор
        direc.normalize();
2) Unproject
        QVector3D screenPos(p.x(),p.y(),1.0f); // p.x, p.y экранные координаты клика
        QVector3D vecUnproj = screenPos.unproject(m_view, m_projection,QRect(0,0, 640, 480));
        vecUnproj.normalize();
Output:
    direc = QVector3D(0.314588, 0, -0.949228)
    unproject = QVector3D(0.314589, 0, -0.949228)
В итоге у результирующего вектора полученный x = 0,31 c копейками, а ожидалось что-то около 1.0. Понимаю, что похоже что-то не учитываю в преобразовании или не делаю еще какую то операцию. Надеюсь, подскажите правильный путь.