2012-05-30 39 views
12

Let A ser vista de matriz 4x4 de MATLAB, obtenida a partir de la función de vista por:Matlab 3D matriz

A = view; 

A(1:3,1:3) debe corresponder a la rotación y el escalado,
A(1:3,4) debe corresponder a la traducción, y
A(4,:) debería hacerlo simplemente sea [0 0 0 1].

Al configurar los parámetros de la cámara a la siguiente escenario simple:

consigo que A = view es:

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

Ahora no puedo encontrar la nuestra, donde los 0,5 de vienen de . Tenga en cuenta que configuro la posición de la cámara en [0,0,0] por lo que no debe haber traducción.

Otra peculiaridad, ajustar la posición de la cámara en [0,0,10] por:

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

resultados en la A: = Vista matriz convertirse

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

Así que me he dado cuenta de la -0.5 ha cambiado a 5.5 en A(3,4) y esto de alguna manera tiene que ver con 5 = 10/2.
Es decir, cambiar la posición de la cámara a [0,0, a] cambia la matriz de vista al A(3,4) por aproximadamente a/2.

Esto es ... raro? ¿Peculiar? ¿Impar?

Actualización: Otra peculiaridad es que el determinante de A (1: 3,1: 3) es -1 aunque para una matriz de rotación debería ser 1. Cuando es -1 significa que no es solo rotación sino también reflejo. ¿Por qué necesitaríamos reflexión?

+0

También estoy obteniendo los mismos resultados, realmente extraño ... Por lo que vale, mira esto [hilo] (http://www.mathworks.com/matlabcentral/answers/15887-how-to-render-an-accurate-image-of-a-3d-model) que menciona algunas propiedades de ejes no documentados relacionados con la vista 3D y 2D proyección – Amro

Respuesta

0

Supongo que matlab te permite configurarlo como si las coordenadas de los píxeles estuvieran en el rango de (-0.5 * tamaño de vista, 0.5 * tamaño de ventana), pero internamente utiliza el sistema de coordenadas de píxel más común en el que la coordenada de cada píxel está en el rango de (0, tamaño de la vista).

0

No estoy familiarizado con matlab, pero: en gráficos 3D, siempre se distingue entre proyección y matrices de cámara.

La proyección va desde el "espacio de la cámara" donde la cámara está en cero al espacio proyectivo. Después de que se aplica la matriz proyectiva, las coordenadas de la pantalla se calculan como x '= x/w, etc. Por lo tanto, en perspectiva, lo único que hace la matriz proyectiva es mover z a w. En ortográfico es posible que se agregue z a x en su lugar.

Pero también suele incluir transformaciones de ventana. En el espacio de la cámara, la cámara está en 0 y mirando hacia abajo z, por lo que las coordenadas son más -1..1. Pero las coordenadas de la ventana son 0..1, por lo tanto, a menudo son * .5, +.5 o lo niegan, etc.

La rareza que ve es al mezclar la cámara y la proyección. Estoy seguro de que Matlab tiene ambos. Use la matriz de la cámara para mover y girar la cámara. Use la proyección solo para coordenadas de ventana y efectos de perspectiva.

1

Pruebe lo mismo en Matlab 2013a ... encontrará los resultados que coinciden con las expectativas ...No sé qué versión de Matlab estás usando ... pero ciertamente está corregido en la versión 8.1