Перемещение камеры через сцену

Сводные данные методов

Муха - через является эффектом, созданным путем перемещения камеры через 3-мерное пространство, произведения впечатления, которым вы управляете наряду с камерой как будто в самолете. Можно полететь через области сцены, которая может быть в противном случае затенена объектами в сцене, или можно полететь сценой путем хранения камеры фокусируемой на конкретной точке.

Чтобы выполнить эти эффекты, вы перемещаете камеру вдоль конкретного пути, ось X, например, в серии шагов. Чтобы произвести муху - через, переместите и положение камеры и целевой объект камеры одновременно.

Следующий пример использует муху - хотя эффект просмотреть внутреннюю часть изоповерхности, чертившей в объеме, заданном векторным полем скоростей ветра. Эти данные представляют воздушные потоки по Северной Америке.

Этот пример использует много методов визуализации. Это использует

  • Изоповерхности и конус строят, чтобы проиллюстрировать поток через объем

  • Подсветка, чтобы осветить изоповерхность и конусы в объеме

  • Линии потоков, чтобы задать путь для камеры через объем

  • Скоординированное движение положения камеры, целевого объекта камеры и света

Построение графика данных объема

Первый шаг должен чертить изоповерхность и построить воздушный поток с помощью конических графиков.

Смотрите isosurface, isonormals, reducepatch и coneplot для получения информации об использовании этих команд.

Установка соотношения сторон данных (daspect) к [1,1,1] прежде, чем построить конический график позволяет MATLAB вычислить размер конусов правильно для итогового представления.

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';

Установка представления

Необходимо задать параметры просмотра, чтобы гарантировать, что сцена отображена правильно:

  • Выбор перспективной проекции обеспечивает восприятие глубины, когда камера проходит через внутреннюю часть изоповерхности (camproj).

  • Установка угла поля зрения камеры к фиксированному значению предотвращает MATLAB от автоматической корректировки угла, чтобы охватить целую сцену, а также увеличивание масштаб желаемой суммы (camva).

    camproj perspective
    camva(25)
    

Определение источника света

Расположение источника света в местоположении камеры и изменение характеристик коэффициента отражения изоповерхности и конусов улучшают реализм сцены:

  • Создание источника света в положении камеры обеспечивает "фару", которая перемещается наряду с камерой через внутреннюю часть изоповерхности (camlight).

  • Установка отражательных свойств изоповерхности дает внешний вид темной внутренней части (набор AmbientStrength к 0,1) с очень отражающим материалом (SpecularStrength и набор DiffuseStrength к 1).

  • Установка SpecularStrength конусов к 1 делает их очень отражающими.

    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])

Выбор Способа подсвечивания

Используйте подсветку gouraud для более сглаженной подсветки:

lighting gouraud

Определение пути к камере как линии потоков

Линии потоков указывают на направление потока в векторном поле. Этот пример использует x-, y-, и данные z-координаты строки единого потока, чтобы сопоставить путь через объем. Камера затем перемещена вдоль этого пути. Задачи включают

  • Создайте линию потоков, запускающуюся в point x = 80, y = 30, z = 11.

  • Получите x-, y-, и данные z-координаты линии потоков.

  • Удалите линию потоков (вы могли также использовать stream3, чтобы вычислить данные о линии потоков, на самом деле не чертя линию потоков).

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

Реализация мухи - через

Чтобы создать муху - через, переместите положение камеры и целевой объект камеры вдоль того же пути. В этом примере целевой объект камеры помещается пять элементов далее вдоль оси X, чем камера. Маленькое значение добавляется к целевому объекту камеры x положение, чтобы предотвратить положение камеры и цели от становления той же точкой, если условие xd(n) = xd(n+5) должно произойти:

  • Обновите положение камеры и целевой объект камеры так, чтобы они оба прошли координаты линии потоков.

  • Переместите свет наряду с камерой.

  • Вызовите drawnow, чтобы отобразить результаты каждого перемещения.

    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 

Смотрите coneplot для фиксированной визуализации тех же данных.