Скажу сразу: проблема сложная. Есть причина, по которой на связанный вопрос Дэна Стори нет ответа. Позвольте дать объяснение тем, кто хочет нанести удар. Я надеюсь, что ошибаюсь насчет того, насколько это сложно.
Я предполагаю, что вам известны 2D-координаты экрана и матрица проекции / перспективы. Вам нужно знать хотя бы это (если вы не знаете матрицу проекции, по сути, вы используете другую камеру, чтобы смотреть на мир). Назовем каждую пару координат 2D экрана (a_i, b_i)
, и я предполагаю, что матрица проекции имеет вид
P = [ px 0 0 0 ]
[ 0 py 0 0 ]
[ 0 0 pz pw]
[ 0 0 s 0 ], s = +/-1
Такую форму имеет почти любая разумная проекция. Проработав конвейер рендеринга, вы обнаружите, что
a_i = px x_i / (s z_i)
b_i = py y_i / (s z_i)
где (x_i, y_i, z_i)
- исходные трехмерные координаты точки.
Теперь предположим, что вы знаете свою форму в наборе канонических координат (как хотите), так что вершины равны (x0_i, y0_i, z0_i)
. Мы можем расположить их как столбцы матрицы C
. Фактические координаты формы представляют собой жесткое преобразование этих координат. Аналогичным образом организуем фактические координаты как столбцы матрицы V
. Тогда они связаны
V = R C + v 1^T (*)
где 1^T
- вектор-строка из единиц правильной длины, R
- ортогональная матрица вращения жесткого преобразования, а v
- вектор смещения преобразования.
Теперь у вас есть выражение для каждого столбца V
сверху: первый столбец - это { s a_1 z_1 / px, s b_1 z_1 / py, z_1 }
и так далее.
Вы должны решить набор уравнений (*)
для набора скаляров z_i
и жесткое преобразование, определенное R
и v
.
Проблемы
- Уравнение нелинейно относительно неизвестных, включая частные от
R
и z_i
.
- До сих пор мы предполагали, что вы знаете, какие 2D-координаты соответствуют вершинам исходной формы (если ваша фигура является квадратом, это немного менее проблематично).
- Мы предполагаем, что решение есть вообще; если в 2D-данных есть ошибки, то трудно сказать, насколько хорошо будет выполнено уравнение
(*)
; преобразование будет нежестким или нелинейным.
person
Victor Liu
schedule
03.04.2010