Как преобразовать задние точки в 2d в 3d с известной матрицей ортогональной проекции (камеры)?
У меня есть массив с 2d точками, которые я преобразовываю из 3d в 2d по следующему уравнению:
https://wikimedia.org/api/rest_v1/media/math/render/svg/198f15da062c7ce00598d7a2f9bd8169d7042ed3
Как я могу преобразовать точку обратно в 3D?
Я использовал матрицу вида сверху вниз, которая изображена выше. Найдено в Википедии: https://en.wikipedia.org/wiki/Orthographic_projection
#To 2D from 3d:
points2D = np.array([np.matmul(camera_pos, point) for point in points3D])[:,:2]
1 ответ
Вы не можете преобразовать его обратно, используя только спроецированные точки. Обратите внимание, что ваша проекция в основном просто смотрит на (x,y)
ценности и отбрасывание z
значение, так что нет никакого способа узнать, что z
был после этого.
Например, рассмотрим точки u = [1,2,3]
а также v=[1,2,-3]
, Эти оба проекта [1,2,0]
так что нет никакого способа узнать, должны ли мы сделать [1,2,0]
в u
или же v
когда мы пытаемся инвертировать (отменить) проекцию.
В терминах матричной операции это происходит потому, что проекционные матрицы не являются обратимыми (кроме единичной матрицы).
Вам понадобится больше информации, чем просто спроецированные точки, чтобы восстановить исходные точки.