Рассчитать трехмерные координаты из плоскости 2D-изображения с учетом перспективы без прямого доступа к матрице вида / проекции

Первый раз задаю вопрос по обмену стека, надеюсь, это правильное место.

Кажется, я не могу разработать достаточно приближенный алгоритм аппроксимации для моей ситуации, так как я не совсем лучший с точки зрения 3D математики.

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

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

Мне удалось добраться до точки использования "сущностей точек регистрации", которые могут быть размещены в трехмерном мире, которые представляют углы 2-го изображения, а затем, когда точка выбрана на 2-м изображении, она читается как координата. с диапазоном 0-1, который затем интерполируется между 3d-позициями точек регистрации. Это, кажется, работает хорошо, но только если изображение имеет идеальный угол сверху вниз. Когда камера наклонена и введено другое измерение перспективы, результаты становятся более неточными, так как нет компенсации для этой перспективы.

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

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

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

Любая помощь будет оценена, спасибо.

Редактировать: Herp derp, хотя моя реализация для этого немного странная из-за ограничений моей ситуации, решение по существу сводилось к ответу ananthonline о простом пересчете матриц вида / проекции.

1 ответ

Решение

Не могли бы вы вычислить матрицы вида / проекции камеры (songho.ca/opengl/gl_projectionmatrix.html) между положением, вращением и полем зрения камеры (таким образом, позволяя вам не проецировать известные 3D-точки?

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