Какая польза от проекционной матрицы?
Я пытался проанализировать 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. Надеюсь это поможет:)