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