Main Content

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 automatic, la escena determina la posición. En el modo manual, el usuario especifica la posición de la perspectiva.

CameraTarget

Especifica la posición en los ejes señalados por la cámara. Junto con la CameraPosition, define el eje de visualización.

CameraTargetMode

En el modo automatic, MATLAB® especifica el CameraTarget como el centro de los cuadros de gráficas de ejes. En el modo manual, el usuario especifica la ubicación.

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 automatic, MATLAB orienta el vector ascendente a lo largo del eje y positivo para las vistas en 2D y a lo largo del eje z positivo para las vistas en 3D. En el modo manual, el usuario especifica la dirección.

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 automatic, MATLAB ajusta el ángulo de visión al ángulo más pequeño que captura toda la escena. En el modo manual, el usuario especifica el ángulo.

Al definir CameraViewAngleMode en manual, se anula el comportamiento de "expandir a relleno".

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 comando view)

  • Define el CameraTarget en el centro del cuadro de la gráfica

  • Define 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 3D

  • Define 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 propiedad Position 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