Облет - это эффект, созданный перемещением камеры через 3-мерное пространство, создающий впечатление, что вы летаете вместе с камерой как бы в самолете. Можно летать через области сцены, которые в противном случае могут быть заслонены объектами в сцене, или можно летать по сцене, сохраняя фокус камеры на конкретной точке.
Чтобы выполнить эти эффекты, вы перемещаете камеру вдоль определенного пути, например, ось X, последовательно. Чтобы произвести пролет, переместите и положение камеры, и целевой объект камеры одновременно.
В следующем примере используется эффект fly-tra, чтобы просмотреть внутреннюю поверхность изоповерхности, нарисованную в объеме, заданном векторным полем скоростей ветра. Эти данные представляют воздушные течения над Северной Америкой.
В этом примере используется ряд методов визуализации. Он использует
Изоповерхности и конусные графики, чтобы проиллюстрировать поток через объем
Освещение для освещения изоповерхности и конусов в объеме
Потоковые линии, чтобы задать путь для камеры через громкость
Скоординированное движение положения камерыцелевого объекта камеры и света
Первым шагом является рисование изоповерхности и построение графика воздушного потока с помощью конусных графиков.
Посмотрите 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-координатные данные одной линии потока, чтобы сопоставить путь через том. Затем камера перемещается по этому пути. Задачи включают
Создайте линию потока, начиная с точки 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
для фиксированной визуализации тех же данных.