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