У меня есть входные 3D-векторные точки в мировой системе координат. Может ли кто-нибудь описать или предоставить ссылку на ресурс, который поможет мне понять и реализовать необходимое преобразование и сопоставление матриц для преобразования в координаты камеры? Изображение для этого http://www.mathworks.in/help/matlab/visualize/chview3.gif Я знаю координаты точки обзора на этом изображении в мировых координатах и конвертирую их в координаты камеры
Как преобразовать координаты 3D-мира в координаты 3D-камеры
Ответы (1)
Вы должны применить две математические операции:
- Сместите все координаты на координаты точки обзора, но в противоположном направлении. После этого точка обзора становится новым началом, и все координаты выражаются в соответствии с ним.
Пример ('|' просто обозначает скобки вектора)
|x'| |x| - |x_vp|
|y'| = |y| - |y_vp|
|z'| |z| - |z_vp|
- Поверните координаты. например сначала вокруг Z, затем Y. Это делается с помощью двух матриц вращения:
Z:
|x''| | cos a -sin a 0 | |x'|
|y''| = | sin a cos a 0 | * |y'|
|z''| | 0 0 1 | |z'|
Y:
|x'''| | cos b 0 -sin b | |x''|
|y'''| = | 0 1 0 | * |y''|
|z'''| | sin b 0 cos b | |z''|
Например, если ваш VP находится на (1, 1, 1), вы сначала сдвинете его так, чтобы старое начало координат теперь находилось на (-1, -1, -1) . Камера по-прежнему смотрит в положительном направлении оси x, поэтому вы должны повернуть ее на 225 градусов вокруг оси z (теперь ориентируясь на старую ось z), а затем на 45 градусов вокруг оси y, чтобы указать точно на старое начало координат.
Однако вы вращаете не камеру, а все пространство вокруг камеры, поэтому вам придется умножать углы на -1.
Дополнительную информацию можно найти на странице http://en.wikipedia.org/wiki/Rotation_matrix.
Если вы не знаете матричного умножения, в первой главе это показано.