Какая польза от проекционной матрицы?

Я пытался проанализировать pARk от Apple (пример приложения дополненной реальности), где я наткнулся на следующую функцию:

Вызов метода с параметрами ниже:

createProjectionMatrix(projectionTransform, 60.0f*DEGREES_TO_RADIANS, self.bounds.size.width*1.0f / self.bounds.size.height, 0.25f, 1000.0f);
void createProjectionMatrix(mat4f_t mout, float fovy, float aspect, float zNear, float zFar)
{
    float f = 1.0f / tanf(fovy/2.0f);

    mout[0] = f / aspect;
    mout[1] = 0.0f;
    mout[2] = 0.0f;
    mout[3] = 0.0f;

    mout[4] = 0.0f;
    mout[5] = f;
    mout[6] = 0.0f;
    mout[7] = 0.0f;

    mout[8] = 0.0f;
    mout[9] = 0.0f;
    mout[10] = (zFar+zNear) / (zNear-zFar);
    mout[11] = -1.0f;

    mout[12] = 0.0f;
    mout[13] = 0.0f;
    mout[14] = 2 * zFar * zNear /  (zNear-zFar);
    mout[15] = 0.0f;
}

я вижу это projection matrix умножается на rotation matrix(получено с помощью API motionManager.deviceMotion). Какая польза от проекционной матрицы? Почему ее нужно умножать на матрицу вращения?

multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);

Почему результирующая матрица должна быть умножена на векторные координаты PointOfInterest?

multiplyMatrixAndVector(v, projectionCameraTransform, placesOfInterestCoordinates[i]);

Цените любую помощь здесь.

Пример кода здесь

1 ответ

В компьютерном зрении и в робототехнике типичная задача состоит в том, чтобы идентифицировать конкретные объекты на изображении и определить ПОЛОЖЕНИЕ и ОРИЕНТАЦИЮ каждого объекта (или перемещение и вращение) относительно некоторой системы координат.

В дополненной реальности мы обычно вычисляем позу обнаруженного объекта, а затем увеличиваем виртуальную модель поверх него. Мы можем более реалистично проецировать виртуальную модель, если знаем позу обнаруженного объекта.

Совместная матрица вращения-сдвига [R|t] называется матрицей внешних параметров. Он используется для описания движения камеры вокруг статичной сцены или наоборот, жесткого движения объекта перед неподвижной камерой. То есть [R|t] переводит координаты точки (X, Y, Z) в систему координат, фиксированную относительно камеры. Это предлагает вам позу 6DOF (3 поворота и 3 перевода), необходимые для Mobile AR.

Хорошее чтение, если вы хотите узнать больше http://games.ianterrell.com/learn-the-basics-of-opengl-with-glkit-in-ios-5/

Извините, я работаю только с Android AR. Надеюсь это поможет:)

Другие вопросы по тегам