Рассчитать трехмерные координаты из плоскости 2D-изображения с учетом перспективы без прямого доступа к матрице вида / проекции
Первый раз задаю вопрос по обмену стека, надеюсь, это правильное место.
Кажется, я не могу разработать достаточно приближенный алгоритм аппроксимации для моей ситуации, так как я не совсем лучший с точки зрения 3D математики.
У меня есть трехмерная среда, в которой я могу получить доступ к положению и повороту любого объекта, включая мою камеру, а также провести линии трассировки из любых двух точек, чтобы получить расстояния между точкой и точкой столкновения. У меня также есть поле зрения моей камеры. У меня нет никакой формы доступа к матрицам мира / вида / проекции.
У меня также есть коллекция двумерных изображений, которые в основном представляют собой скриншоты трехмерной среды с камеры, каждая коллекция с одной и той же точки и угла, а средний набор взят примерно под углом 60 градусов вниз от горизонт.
Мне удалось добраться до точки использования "сущностей точек регистрации", которые могут быть размещены в трехмерном мире, которые представляют углы 2-го изображения, а затем, когда точка выбрана на 2-м изображении, она читается как координата. с диапазоном 0-1, который затем интерполируется между 3d-позициями точек регистрации. Это, кажется, работает хорошо, но только если изображение имеет идеальный угол сверху вниз. Когда камера наклонена и введено другое измерение перспективы, результаты становятся более неточными, так как нет компенсации для этой перспективы.
Мне не нужно рассчитывать высоту точки, скажем, окна на небоскребе, но, по крайней мере, координату у основания плоскости изображения, или что, если я вытяну линию из моего изображения из Указанная точка пространства изображения мне нужна хотя бы точка, что линия будет пересекаться с землей, если на пути ничего не было.
Весь материал, который я нашел по этому поводу, говорит о том, чтобы просто спроецировать точку с использованием матриц мира / вида / проекции, которые я нахожу само по себе, за исключением того, что у меня нет доступа к этим матрицам, только данные, которые я могу собрать во время скриншота и другие. алгоритмы используют сложную математику, которую я просто еще не понимаю.
Одна из конечных целей этого - разместить маркеры в трехмерной среде, где пользователь нажимает на изображение, и при этом не может выполнить простую депроекцию с точки зрения пользователя.
Любая помощь будет оценена, спасибо.
Редактировать: Herp derp, хотя моя реализация для этого немного странная из-за ограничений моей ситуации, решение по существу сводилось к ответу ananthonline о простом пересчете матриц вида / проекции.
1 ответ
Не могли бы вы вычислить матрицы вида / проекции камеры (songho.ca/opengl/gl_projectionmatrix.html) между положением, вращением и полем зрения камеры (таким образом, позволяя вам не проецировать известные 3D-точки?