Main Content

Movimiento de la cámara por la escena

Resumen de técnicas

Un plano aéreo es el efecto creado al mover la cámara por un espacio tridimensional, dando la impresión de que lo sobrevuela con la cámara, como si estuviese en un avión. Puede sobrevolar las regiones de una escena que, probablemente, se encuentren ocultas por otros objetos de la escena o puede sobrevolar por una escena haciendo que la cámara siga enfocada en un punto concreto.

Para conseguir estos efectos debe mover la cámara por una ruta en concreto, el eje x, por ejemplo, en una serie de pasos. Para generar el efecto de plano aéreo, mueva la posición de la cámara y el objetivo de la misma a la vez.

En el siguiente ejemplo se emplea el efecto de plano aéreo para ver el interior de una isosuperficie dibujada en un volumen definido por un campo de vectores de la velocidad del viento. Estos datos representan las corrientes de aire de América del Norte.

Este ejemplo emplea una variedad de técnicas de visualización. Utiliza:

  • Gráficas cónicas y de isosuperficies para ilustrar el flujo a través del volumen.

  • Luces para iluminar la isosuperficie y los conos en el volumen.

  • Líneas de recorrido para definir la ruta de la cámara a través del volumen.

  • movimiento coordinado de la posición de la cámara, de su objetivo y de la luz.

Datos volumétricos de la gráfica

El primer paso es dibujar la isosuperficie y trazar el flujo de aire mediante gráficas cónicas.

Consulte isosurface, isonormals, reducepatch y coneplot para obtener información sobre el uso de estos comandos.

Establecer el relación de aspecto de los datos (daspect) a [1,1,1] antes de dibujar la gráfica cónica permite que el software de MATLAB® calcule el tamaño de los conos de forma correcta para la vista final.

load wind
wind_speed = sqrt(u.^2 + v.^2 + w.^2);
figure
p = patch(isosurface(x,y,z,wind_speed,35));
isonormals(x,y,z,wind_speed,p)
p.FaceColor = [0.75,0.25,0.25];
p.EdgeColor = [0.6,0.4,0.4];

[f,vt] = reducepatch(isosurface(x,y,z,wind_speed,45),0.05); 
daspect([1,1,1]);
hcone = coneplot(x,y,z,u,v,w,vt(:,1),vt(:,2),vt(:,3),2);
hcone.FaceColor = 'blue';
hcone.EdgeColor = 'none';

Establecer la vista

Debe definir los parámetros de visión para garantizar que la escena se muestra correctamente:

  • Seleccionar una proyección con perspectiva ofrece la percepción de la profundidad a medida que la cámara pasa por el interior de la isosuperficie (camproj).

  • establecer el ángulo de visión de la cámara en un valor fijo evita que MATLAB lo ajuste de manera automática para abarcar la escena completa y aumentar cuanto se desee (camva).

    camproj perspective
    camva(25)
    

Especificar la fuente de luz

Situar la fuente de luz en la posición de la cámara y modificar las características reflectantes de la isosuperficie y los conos mejora el realismo de la escena:

  • Crear una fuente de luz en la posición de la cámara produce un "foco" que se mueve con la cámara por el interior de la isosuperficie (camlight).

  • establecer las propiedades de reflexión de la isosuperficie proporciona la apariencia de un interior oscuro (AmbientStrength establecido en 0.1) con material altamente reflectante (SpecularStrength y DiffuseStrength establecidos en 1).

  • Establecer la SpecularStrength de los conos en 1 los hace altamente reflectantes.

    hlight = camlight('headlight'); 
    p.AmbientStrength = 1;
    p.SpecularStrength = 1;
    p.DiffuseStrength = 1;
    hcone.SpecularStrength = 1;
    set(gcf,'Color','k')
    set(gca,'Color',[0,0,0.25])

Seleccionar el método de iluminación

Utilice la iluminación gouraud para obtener una iluminación más suave:

lighting gouraud

Definir la ruta de la cámara como una línea de recorrido

Las líneas de recorrido indican la dirección del flujo del campo de vectores. En este ejemplo se emplean los datos de coordenadas x, y y z de una sola línea de recorrido para elaborar una ruta a través del volumen. Después, la cámara se mueve por esta ruta. Las tareas incluyen

  • Cree una línea de recorrido desde el punto x = 80, y = 30, z = 11.

  • Obtenga los datos de coordenadas x, y y z de la línea de recorrido.

  • Elimine la línea de recorrido (también puede utilizar stream3 para calcular los datos de la línea de recorrido sin dibujarla).

    hsline = streamline(x,y,z,u,v,w,80,30,11);
    xd = hsline.XData;
    yd = hsline.YData;
    zd = hsline.ZData; 
    delete(hsline)
    

Implementar el plano aéreo

Para crear un efecto de plano aéreo, mueva la posición de la cámara y su objetivo por la misma ruta. En este ejemplo, el objetivo de la cámara se coloca a cinco puntos de distancia en el eje x de la cámara. Se añade un pequeño valor a la posición x del objetivo de la cámara para evitar que la posición de la cámara y el objetivo sean el mismo punto si la condición xd(n) = xd(n+5) ocurre:

  • Actualice la posición de la cámara y su objetivo de modo que ambos puedan moverse por las coordenadas de la línea de recorrido.

  • Mueva la luz junto con la cámara.

  • Llame a drawnow para mostrar el resultado de cada movimiento.

    for i=1:length(xd)-5
       campos([xd(i),yd(i),zd(i)])
       camtarget([xd(i+5)+min(xd)/500,yd(i),zd(i)])
       camlight(hlight,'headlight')
       drawnow
    end 

Consulte coneplot para ver los mismos datos