Как преобразовать задние точки в 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 когда мы пытаемся инвертировать (отменить) проекцию.

В терминах матричной операции это происходит потому, что проекционные матрицы не являются обратимыми (кроме единичной матрицы).

Вам понадобится больше информации, чем просто спроецированные точки, чтобы восстановить исходные точки.

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