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