2012-05-30 3 views
12

Пусть A быть вид 4x4 матрица от Matlab, полученные из функции просмотра:Matlab 3D вид матрицы

A = view; 

A(1:3,1:3) должны соответствовать поворот и масштабирование,
A(1:3,4) должен соответствовать переводу, и
A(4,:) должны просто быть [0 0 0 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, это означает, что это не только вращение, но и тоже отражающий. Зачем нам нужно размышлять?

+0

Я также получаю те же результаты, что странно ... Для чего стоит, посмотрите эту [нить] (http://www.mathworks.com/matlabcentral/answers/15887-how-to-render-an-accurate-image-of-a-3d-model), в котором упоминается несколько свойств недокументированных осей, связанных с 3D-представлением и 2D проекция – Amro

ответ

0

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

0

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

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

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

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

1

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

Смежные вопросы