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

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

Облет - это эффект, созданный перемещением камеры через 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)
    

Реализуйте Fly-Through

Чтобы создать пролет, переместите положение камеры и целевой объект камеры вдоль одного и того же пути. В этом примере целевой объект камеры помещается на пять элементов дальше по оси 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 для фиксированной визуализации тех же данных.