Муха - через является эффектом, созданным путем перемещения камеры через 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
для фиксированной визуализации тех же данных.