Ответ 1
Попробуйте то же самое в Matlab 2013a.. вы найдете результаты, соответствующие ожиданию... Я не знаю, какую версию Matlab вы используете.. но она, безусловно, исправлена в версии 8.1
Пусть 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 означает, что она не только вращается, но и отражается. Зачем нам нужно размышление?
Попробуйте то же самое в Matlab 2013a.. вы найдете результаты, соответствующие ожиданию... Я не знаю, какую версию Matlab вы используете.. но она, безусловно, исправлена в версии 8.1
Моя образованная догадка заключается в том, что Matlab позволяет установить ее так, как если бы пиксельные координаты находились в диапазоне (-0,5 * размер видового экрана, 0,5 * размер видового экрана), но внутренне использует более общую систему координат пикселей, в которой координата каждого пикселя находится в диапазоне (0, размер видового экрана).
Не знаком с Matlab, но: В 3D-графике вы всегда различаете матрицу проекции и камеры.
Проецирование происходит из "пространства камеры", где камера находится в нулевом направлении до проективного пространства. После применения проективной матрицы координаты экрана вычисляются как x '= x/w и т.д. Таким образом, в перспективе все проективные матрицы должны перемещать z в w. В орфографической может вместо этого добавить z в x.
Но он также часто включает в себя преобразования окон. В пространстве камеры камера находится в 0 и смотрит вниз на z, поэтому координаты больше -1.1. Но координаты окна равны 0..1, поэтому часто *.5, +.5 или отрицание и т.д.
Странность, которую вы видите, - это смешение камеры и проекции. Я уверен, что у Matlab есть и то, и другое. Используйте матрицу камеры для перемещения и поворота камеры. Используйте проекцию только для координат окна и перспективных эффектов.