Низкоуровневые свойства камеры

Свойства камеры можно установить

Графика камеры основана на группе свойств осей, которые управляют положением и ориентацией камеры. В целом команды камеры, такие как campos, camtarget, и camup, делают ненужным получить доступ к этим свойствам непосредственно.

Свойство

Описание

CameraPosition

Задает местоположение точки зрения в модулях осей.

CameraPositionMode

В режиме automatic сцена определяет положение. В режиме manual вы задаете местоположение точки зрения.

CameraTarget

Задает местоположение в осях, на которые указывает камера. Вместе с CameraPosition это задает ось просмотра.

CameraTargetMode

В режиме automatic MATLAB® задает CameraTarget, когда центр осей строит поле. В режиме manual вы задаете местоположение.

CameraUpVector

Вращение камеры вокруг оси просмотра задано вектором, указывающим на направление, взятое как.

CameraUpVectorMode

В режиме automatic MATLAB ориентируется вектор вдоль положительной оси Y для 2D представлений и вдоль положительной оси z для 3-D представлений. В режиме manual вы задаете направление.

CameraViewAngle

Задает поле зрения "линзы". Если вы задаете значение для CameraViewAngle, MATLAB не простирается - оси, чтобы соответствовать фигуре.

CameraViewAngleMode

В режиме automatic MATLAB настраивает угол представления к самому маленькому углу, который получает целую сцену. В режиме manual вы задаете угол.

Установка CameraViewAngleMode к manual заменяет "растянуть для заполнения" поведение.

Projection

Выбирает или ортогональную или перспективную проекцию.

Выбор точки зрения по умолчанию

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

По умолчанию, MATLAB

  • Устанавливает CameraPosition, таким образом, ориентацией сцены является стандартный MATLAB 2D или 3-D представление (см. команду view),

  • Устанавливает CameraTarget на центр поля графика

  • Устанавливает CameraUpVector, таким образом, направление Y подлежит 2D представлениям, и z-направление подлежит 3-D представлениям

  • Устанавливает CameraViewAngle на минимальный угол, который заставляет сцену заполнить прямоугольник положения (прямоугольник, заданный свойством Position осей)

  • Ортогональная проекция использования

Это поведение по умолчанию обычно приводит к желательным результатам. Однако можно изменить эти свойства произвести полезные эффекты.

Приближение и на сцене

Можно переместить камеру куда угодно в 3-D пробел, заданный осями. Камера продолжает указывать на цель независимо от своего положения. Когда камера перемещается, MATLAB отличается угол поля зрения камеры, чтобы гарантировать, что сцена заполняет прямоугольник положения.

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

Можно создать эффект демонстрационного полета путем перемещения камеры через сцену. Для этого постоянно изменяйте свойство CameraPosition, перемещая его к цели. Поскольку камера перемещается через пробел, это поворачивается, когда это перемещается мимо целевого объекта камеры. Замените MATLAB автоматическое изменение размеров сцены каждый раз, когда вы перемещаете камеру путем установки CameraViewAngleMode на manual.

Если вы обновляете CameraPosition и CameraTarget, эффект состоит в том, чтобы пройти через сцену, постоянно стоя перед направлением перемещения.

Если Projection установлен в perspective, объем перспективных увеличений искажения, когда камера становится ближе к цели и уменьшается, как это становится более далеким.

Пример - перемещающийся к или далеко от цели

Чтобы переместить камеру вдоль оси просмотра, необходимо вычислить новые координаты для свойства CameraPosition. Это выполняется путем вычитания (чтобы придвинуться поближе к цели) или добавления (чтобы переехать от цели) некоторая часть общего расстояния между положением камеры и целевым объектом камеры.

Функциональный movecamera вычисляет новый CameraPosition, который приближается на сцене, если аргумент dist положителен и съезжает, если dist отрицателен.

function movecamera(dist) %dist in the range [-1 1]
set(gca,'CameraViewAngleMode','manual')
newcp = cpos - dist * (cpos - ctarg);
set(gca,'CameraPosition',newcp)
function out = cpos
out = get(gca,'CameraPosition');
function out = ctarg
out = get(gca,'CameraTarget');

Установка CameraViewAngleMode к manual может вызвать резкое изменение в соотношении сторон.

Создание сцены, более крупной или меньшей

Корректировка свойства CameraViewAngle делает представление сцены больше или меньшим. Большие углы заставляют представление охватывать большую область, таким образом, заставляя объекты в сцене казаться меньшими. Точно так же меньшие углы заставляют объекты казаться больше.

Изменение CameraViewAngle делает сцену более крупной или меньшей, не влияя на положение камеры. Это желательно, если вы хотите увеличить масштаб, не перемещая точку зрения прошлые объекты, которые затем больше не будут в сцене (как это могло произойти, если бы вы изменили положение камеры). Кроме того, изменение CameraViewAngle не влияет на сумму перспективы, применился к сцене, как изменяющийся CameraPosition делает, когда фигура свойство Projection установлена в perspective.

Вращение вокруг сцены

Можно использовать команду view, чтобы вращать точку зрения об оси z путем варьирования азимута, и об азимуте путем варьирования повышения. Это имеет эффект перемещения камеры вокруг сцены вдоль поверхности сферы, радиус которой является длиной оси просмотра. Вы могли создать тот же эффект путем изменения CameraPosition, но выполнение так требует, чтобы вы выполнили вычисления, которые MATLAB выполняет для вас, когда вы вызываете view.

Например, функциональный orbit перемещает камеру вокруг сцены.

function orbit(deg)
[az, el] = view;
rotvec = 0:deg/10:deg;
for i = 1:length(rotvec)
    view([az+rotvec(i) el])
    drawnow
end

Вращение без изменения размеров

Когда CameraViewAngleMode является auto, MATLAB вычисляет CameraViewAngle так, чтобы сцена была столь большой, как может поместиться в прямоугольник положения осей. Это вызывает очевидное изменение размера во время вращения сцены. Чтобы предотвратить изменение размеров во время вращения, необходимо установить CameraViewAngleMode на manual (который происходит автоматически, когда вы задаете значение для свойства CameraViewAngle). Для этого в функции orbit, добавьте оператор

set(gca,'CameraViewAngleMode','manual')

Вращение вокруг оси просмотра

Можно изменить ориентацию сцены путем определения направления, заданного как. По умолчанию MATLAB задает как ось Y в 2D представлениях (CameraUpVector является [0 1 0]), и ось z для 3-D представлений (CameraUpVector является [0 0 1]). Однако можно задать как любое произвольное направление.

Вектор, заданный свойством CameraUpVector, формирует одну ось системы координат камеры. Внутренне, MATLAB определяет фактическую ориентацию камеры вектор путем проектирования заданного вектора на плоскость, которая нормальна к направлению камеры (т.е. ось просмотра). Это упрощает спецификацию свойства CameraUpVector, потому что это не должно лежать в этой плоскости.

Во многих случаях вы можете найти удобным визуализировать желаемое вектор с точки зрения углов относительно осей x-, y-, и ось z. Можно затем использовать направляющие косинусы, чтобы преобразовать от углов до векторных компонентов. Для единичного вектора выражение упрощает до

где углы α, β, и γ заданы в градусах.

XComponent = cos(α*(pi/180));

YComponent = cos(β*(pi/180));

ZComponent = cos(γ*(pi/180));

Консультируйтесь с книгой по математике по векторному анализу для более подробного объяснения направляющих косинусов.

Вычисление камеры вектор

Чтобы задать, вектор, который делает угол 30 ° с осью z и находится в y-z плоскости, использует выражение

upvec = [cos(90*(pi/180)),cos(60*(pi/180)),cos(30*(pi/180))];

и затем набор свойство CameraUpVector.

set(gca,'CameraUpVector',upvec)

Рисование сферы с этой ориентацией производит