exponenta event banner

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

Свойства камеры, которые можно задать

Графика камеры основана на группе свойств осей, которые управляют положением и ориентацией камеры. В общем случае, команды камеры, такие как campos, camtarget, и camup, сделать ненужным прямой доступ к этим свойствам.

Собственность

Описание

CameraPosition

Расположение точки обзора в единицах измерения осей.

CameraPositionMode

В automatic режим, сцена определяет положение. В manual указывается местоположение точки обзора.

CameraTarget

Указывает местоположение в осях, на которые указывает камера. Вместе с CameraPosition, он определяет ось просмотра.

CameraTargetMode

В automatic режим, MATLAB ® определяет CameraTarget в качестве центра окна печати осей. В manual укажите местоположение.

CameraUpVector

Поворот камеры вокруг оси обзора определяется вектором, указывающим направление движения вверх.

CameraUpVectorMode

В automatic В режиме MATLAB ориентирует вектор вверх вдоль положительной оси y для 2-D видов и вдоль положительной оси z для 3-D видов. В manual укажите направление.

CameraViewAngle

Определяет поле зрения «объектива». Если задать значение для параметра «Камера» «Вид» «Угол», то MATLAB не растягивает оси по размеру фигуры.

CameraViewAngleMode

В automatic В режиме MATLAB настраивает угол обзора на наименьший угол, который фиксирует всю сцену. В manual , вы указываете угол.

Настройка CameraViewAngleMode кому manual переопределяет поведение «растяжение-заливка».

Projection

Выбор ортогональной или перспективной проекции.

Выбор точки обзора по умолчанию

Если для всех свойств режима камеры установлено значение auto (по умолчанию) MATLAB автоматически управляет видом, выбирая соответствующие значения, исходя из предположения, что требуется, чтобы сцена заполняла прямоугольник положения (который определяется компонентами ширины и высоты осей Position свойство).

По умолчанию MATLAB

  • Устанавливает CameraPosition таким образом, ориентация сцены является стандартным видом MATLAB 2-D или 3-D (см. view команда)

  • Устанавливает CameraTarget к центру поля печати

  • Устанавливает 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)

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