Графика камеры основана на группе свойств осей, которые управляют положением и ориентацией камеры. В целом команды камеры, такие как campos
, camtarget
, и camup
, делают ненужным получить доступ к этим свойствам непосредственно.
Свойство | Описание |
---|---|
CameraPosition | Задает местоположение точки зрения в модулях осей. |
CameraPositionMode | В режиме |
CameraTarget | Задает местоположение в осях, на которые указывает камера. Вместе с |
CameraTargetMode | В режиме |
CameraUpVector | Вращение камеры вокруг оси просмотра задано вектором, указывающим на направление, взятое как. |
CameraUpVectorMode | В режиме |
CameraViewAngle | Задает поле зрения "линзы". Если вы задаете значение для CameraViewAngle, MATLAB не простирается - оси, чтобы соответствовать фигуре. |
CameraViewAngleMode | В режиме Установка |
Projection | Выбирает или ортогональную или перспективную проекцию. |
Когда все свойства режима камеры установлены в auto
(значение по умолчанию), MATLAB автоматически управляет представлением, выбирая соответствующие значения, основанные на предположении, что вы хотите, чтобы сцена заполнила прямоугольник положения (который задан компонентами ширины и высоты свойства Position
осей).
По умолчанию, MATLAB
Устанавливает CameraPosition
, таким образом, ориентацией сцены является стандартный MATLAB 2D или 3-D представление (см. команду view
),
Устанавливает 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)
Рисование сферы с этой ориентацией производит