Propiedades de la cámara de bajo nivel
Propiedades de la cámara que puede configurar
Las gráficas de la cámara se basan en un conjunto de propiedades de ejes que controlan la posición y la orientación de la cámara. Por lo general, los comandos de la cámara, como campos
, camtarget
y camup
, hacen que no sea necesario acceder a estas propiedades directamente.
Propiedad | Descripción |
---|---|
CameraPosition | Especifica la posición de la perspectiva en las unidades de los ejes. |
CameraPositionMode | En el modo |
CameraTarget | Especifica la posición en los ejes señalados por la cámara. Junto con la |
CameraTargetMode | En el modo |
CameraUpVector | La rotación de la cámara sobre el eje de visualización se define mediante un vector que indica la dirección tomada como superior. |
CameraUpVectorMode | En el modo |
CameraViewAngle | Especifica el campo de visión de la "lente". Si se especifica un valor para CameraViewAngle, MATLAB no amplía los ejes para ajustar la figura. |
CameraViewAngleMode | En el modo Al definir |
Projection | Selecciona una proyección ortográfica o con perspectiva. |
Selección del punto de vista predeterminado
Cuando todas las propiedades del modo cámara se definen en auto
(el valor predeterminado), MATLAB controla automáticamente la visión, seleccionando los valores pertinentes en función del supuesto de que se desea que la escena rellene el rectángulo de posición (que se define por los componentes de ancho y altura de la propiedad Position
de los ejes).
De forma predeterminada, MATLAB
Define la
CameraPosition
de manera que la orientación de la escena es la vista en 2D o 3D estándar de MATLAB (consulte el comandoview
)Define el
CameraTarget
en el centro del cuadro de la gráficaDefine el
CameraUpVector
de manera que la dirección de y es ascendente en las vistas en 2D y la dirección de z es ascendente en las vistas en 3DDefine el
CameraViewAngle
en el ángulo mínimo que hace que la escena rellene el rectángulo de posición (el rectángulo definido por la propiedadPosition
de los ejes)Utiliza la proyección ortográfica
Este comportamiento predeterminado genera, por lo general, los resultados deseados. Sin embargo, puede modificar estas propiedades para generar efectos útiles.
Entrar y salir de la escena
Puede mover la cámara a cualquier parte del espacio en 3D definido por los ejes. La cámara continúa apuntando hacia el destino independientemente de su posición. Cuando la cámara se desplaza, MATLAB varía el ángulo de visión de la cámara para garantizar que la escena rellene el rectángulo de posición.
Movimiento por la escena
Puede crear un efecto de sobrevuelo desplazando la cámara por la escena. Para ello, se modifica continuamente la propiedad CameraPosition
, con objeto de desplazarla hacia el destino. Debido a que la cámara se desplaza por el espacio, gira a medida que pasa por el destino de la cámara. Anule el cambio de tamaño automático de la escena en MATLAB cada vez que desplace la cámara definiendo el CameraViewAngleMode
en manual
.
Si actualiza la CameraPosition
y el CameraTarget
, el efecto que se genera es que se pasa por la escena a la vez que se mira continuamente en la dirección del movimiento.
Si la Projection
se define en perspective
, el nivel de distorsión de la perspectiva aumenta a medida que la cámara se acerca al destino y se reduce a medida que se aleja.
Ejemplo: acercarse o alejarse del destino
Para mover la cámara a lo largo del eje de visualización, se han de calcular nuevas coordenadas para la propiedad CameraPosition
. Estos cálculos se llevan a cabo restando (para acercarse al objetivo) o sumando (para alejarse del objetivo) alguna fracción de la distancia total entre la posición de la cámara y el objetivo de la cámara.
La función movecamera
calcula una nueva CameraPosition
que entra en la escena si el argumento dist
es positivo y sale si dist
es negativo.
function movecamera(dist) %dist in the range [-1 1] set(gca,'CameraViewAngleMode','manual') newcp = cpos - dist * (cpos - ctarg); set(gca,'CameraPosition',newcp) function out = cpos out = get(gca,'CameraPosition'); function out = ctarg out = get(gca,'CameraTarget');
Al definir CameraViewAngleMode
en manual
, se puede producir un cambio abrupto en la relación de aspecto.
Aumentar y reducir la escena
El ajuste de la propiedad CameraViewAngle
aumenta o reduce la visión de la escena. Los ángulos más grandes provocan que la visión abarque un área mayor y, por lo tanto, que los objetos de la escena parezcan más pequeños. De manera similar, los ángulos más pequeños hacen que los objetos parezcan más grandes.
Modificar CameraViewAngle
aumenta o reduce la escena sin que ello afecte a la posición de la cámara. Esto es conveniente si se desea aumentar el zoom sin mover el punto de vista por delante de los objetos que, por tanto, ya no aparecerán en la escena (como podría suceder si se cambiase la posición de la cámara). Además, modificar CameraViewAngle
no afecta al nivel de perspectiva que se aplica a la escena, como sí lo hace modificar CameraPosition
cuando la propiedad Projection
de la figura se define en perspective
.
Girar alrededor de la escena
Puede utilizar el comando view
para que el punto de vista gire alrededor del eje z variando el acimut y alrededor del acimut variando la elevación. Su efecto es el desplazamiento de la cámara alrededor de la escena a lo largo de la superficie de una esfera cuyo radio es la longitud del eje de visualización. Se podría crear el mismo efecto modificando CameraPosition
, aunque, al hacerlo, es necesario realizar cálculos que MATLAB lleva a cabo por usted cuando se llama a view
.
Por ejemplo, la función orbit
mueve la cámara alrededor de la escena.
function orbit(deg) [az, el] = view; rotvec = 0:deg/10:deg; for i = 1:length(rotvec) view([az+rotvec(i) el]) drawnow end
Rotación sin cambiar de tamaño
Cuando CameraViewAngleMode
es auto
, MATLAB calcula el CameraViewAngle
para que la escena sea tan grande como quepa en el rectángulo de posición de los ejes. Esto provoca un cambio de tamaño evidente durante la rotación de la escena. Para evitar el cambio de tamaño durante la rotación, se ha de definir CameraViewAngleMode
en manual
(lo que ocurre automáticamente cuando se especifica un valor para la propiedad CameraViewAngle
). Para hacer esto en la función orbit
, añada la instrucción
set(gca,'CameraViewAngleMode','manual')
Rotación alrededor del eje de visualización
Se puede cambiar la orientación de la escena especificando la dirección definida como ascendente. De forma predeterminada, MATLAB define la dirección ascendente como el eje y en las vistas en 2D (CameraUpVector
es [0 1 0]
) y el eje z para las vistas en 3D (CameraUpVector
es [0 0 1]
). Sin embargo, se puede especificar la dirección ascendente como cualquier dirección arbitraria.
El vector definido por la propiedad CameraUpVector
forma un eje del sistema de coordenadas de la cámara. De manera interna, MATLAB determina la orientación real del vector ascendente de la cámara proyectando el vector especificado sobre el plano normal a la dirección de la cámara (es decir, el eje de visualización). Esto simplifica la especificación de la propiedad CameraUpVector
, puesto que no ha de descansar en este plano.
En muchos casos, podría resultarle cómodo visualizar el vector ascendente deseado en términos de ángulos con respecto a los ejes x, y y z. A continuación, puede utilizar cosenos de dirección para convertir de ángulos a componentes de vector. En un vector de unidad, la expresión se simplifica a
donde los ángulos α, β y γ se especifican en grados.
XComponent = cos(α*(pi/180));
YComponent = cos(β*(pi/180));
ZComponent = cos(γ*(pi/180));
Consulte un libro de matemáticas sobre análisis de vectores para obtener una explicación más detallada de los cosenos de dirección.
Calcular un vector ascendente de la cámara
Para especificar un vector ascendente que haga un ángulo de 30° con el eje z y descanse en el plano y-z, utilice la expresión
upvec = [cos(90*(pi/180)),cos(60*(pi/180)),cos(30*(pi/180))];
y, a continuación, establezca la propiedad CameraUpVector
.
set(gca,'CameraUpVector',upvec)
Representar una esfera con esta orientación genera