Подтвердить что ты не робот

Матрица просмотра Matlab 3D

Пусть A - матрица вида MATLAB 4x4, полученная из функции вида:

A = view;

A(1:3,1:3) должен соответствовать вращению и масштабированию,
A(1:3,4) должен соответствовать переводу, и A(4,:) должен быть просто [0 0 0 1].

При настройке параметров камеры на следующий простой сценарий:

camproj('orthographic')
set(gca, 'CameraPosition', [0,0,0])
set(gca, 'CameraTarget', [0,0,1])
set(gca, 'CameraUpVector', [0,1,1])

Я получаю, что A = view есть:

-1 0 0  0.5
 0 1 0 -0.5
 0 0 1 -0.5
 0 0 0    1

Теперь я не могу понять, где находится 0.5. Обратите внимание, что я установил положение камеры на [0,0,0], чтобы не было перевода.

Другая особенность, устанавливающая положение камеры на [0,0,10]:

set(gca, 'CameraPosition', [0,0,10])

приводит к тому, что матрица вида A: = становится

1 0  0 -0.5
0 1  0 -0.5
0 0 -1  5.5
0 0  0    1

Итак, я заметил, что значение -0.5 изменилось на 5.5 в A(3,4), и это как-то связано с 5 = 10/2.
То есть, изменение положения камеры на [0,0, a] изменяет матрицу вида на A(3,4) примерно на a / 2.

Это... странно? Свой? Странно?

Обновление: Еще одна особенность состоит в том, что детерминант A (1: 3,1: 3) равен -1, хотя для матрицы вращения она должна быть равна 1. Когда она -1 означает, что она не только вращается, но и отражается. Зачем нам нужно размышление?

4b9b3361

Ответ 1

Попробуйте то же самое в Matlab 2013a.. вы найдете результаты, соответствующие ожиданию... Я не знаю, какую версию Matlab вы используете.. но она, безусловно, исправлена ​​в версии 8.1

Ответ 2

Моя образованная догадка заключается в том, что Matlab позволяет установить ее так, как если бы пиксельные координаты находились в диапазоне (-0,5 * размер видового экрана, 0,5 * размер видового экрана), но внутренне использует более общую систему координат пикселей, в которой координата каждого пикселя находится в диапазоне (0, размер видового экрана).

Ответ 3

Не знаком с Matlab, но: В 3D-графике вы всегда различаете матрицу проекции и камеры.

Проецирование происходит из "пространства камеры", где камера находится в нулевом направлении до проективного пространства. После применения проективной матрицы координаты экрана вычисляются как x '= x/w и т.д. Таким образом, в перспективе все проективные матрицы должны перемещать z в w. В орфографической может вместо этого добавить z в x.

Но он также часто включает в себя преобразования окон. В пространстве камеры камера находится в 0 и смотрит вниз на z, поэтому координаты больше -1.1. Но координаты окна равны 0..1, поэтому часто *.5, +.5 или отрицание и т.д.

Странность, которую вы видите, - это смешение камеры и проекции. Я уверен, что у Matlab есть и то, и другое. Используйте матрицу камеры для перемещения и поворота камеры. Используйте проекцию только для координат окна и перспективных эффектов.