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

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

Графика камеры основана на группе свойств осей, которые управляют положением и ориентацией камеры. В общем случае команды камеры, такие как camposcamtarget, и 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 свойство

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

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

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

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

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