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
yDiffuseStrength
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