Впервые задал вопрос о обмене стеками, надеюсь, это подходящее место.Вычислить 3D-координаты из 2D плоскости изображения, учитывающей перспективы без прямого доступа к матрице зрения/проецирования
Я не могу разработать достаточно близкий алгоритм аппроксимации для моей ситуации, поскольку я не совсем лучший с точки зрения 3D-математики.
У меня есть 3D-среда, в которой я могу получить доступ к положению и вращению любого объекта, включая мою камеру, а также запустить линии трассировки из любых двух точек, чтобы получить расстояние между точкой и точкой столкновения. У меня также есть поле зрения моей камеры. Однако у меня нет доступа к матрицам мира/представления/проекции.
У меня также есть коллекция 2d-изображений, которые в основном представляют собой скриншоты 3D-среды из камеры, каждая коллекция из одной и той же точки и угла, а средний набор принимается примерно в среднем на 60 градусов угол вниз от горизонта.
Я получил возможность использовать «объекты точки регистрации», которые могут быть размещены в 3D-мире, которые представляют углы изображения 2d, а затем, когда точка выбрана на 2-м изображении, это читать как координату с диапазоном 0-1, который затем интерполируется между 3d позициями точек регистрации. Кажется, что это хорошо работает, но только если изображение является идеальным верхним углом вниз. Когда камера наклонена и вводится другое измерение перспективы, результаты становятся более грубыми неточными, поскольку для этой перспективы нет компенсации.
Мне не нужно уметь вычислять высоту точки, скажем, окно на скребке неба, но, по крайней мере, координату у основания плоскости изображения или, если я продлю линию из мое изображение из заданной точки пространства изображения Мне нужно, по крайней мере, то, что линия будет пересекаться с землей, если ничего не было на пути.
Весь материал, который я нашел об этом, говорит, что он просто депроектирует точку, используя матрицы мира/представления/проекции, которые я считаю прямолинейными, за исключением того, что у меня нет доступа к этим матрицам, просто данные, которые я могу собрать в время скриншота и другие алгоритмы используют сложную математику, которую я просто пока не понимаю.
Одна из целей этой цели заключается в размещении маркеров в трехмерной среде, где пользователь нажимает на изображение, не имея возможности запускать простую депроекцию с точки зрения пользователя.
Любая помощь будет оценена, спасибо.
Edit: Herp Derp, в то время как моя реализация для этого является немного странной из-за ограничения в моей ситуации, решение по существу сводилось к ответу ananthonline в просто о перерасчете матрицы просмотра/проекции.
Можете ли вы «сделать скриншоты» из искусственных/эталонных объектов, которые вы можете разместить в этой 3D-среде? Если да, возможно, вы сможете перепроектировать матрицы представлений/проекций. – Ani
У меня не может быть ничего визуального, что не отображается в 3D-среде на этих изображениях, однако я могу представить вещи, которые не будут отображаться в 3D-среде, которая может обеспечить проверку положения/вращения/трассировки линии, или все, что вам не понадобится для прямого доступа к конвейеру. – Allar
Еще один вопрос: между положением, вращением и FOV камеры, не могли бы вы рассчитать матрицы View/Projection камеры (http://www.songho.ca/opengl/gl_projectionmatrix.html) - таким образом, вы можете создавать непрозрачные 3D-точки? – Ani