UpVector, UpVectorX, UpVectorY, UpVectorZ, KeepUpVector

Направление камеры

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Сводные данные значения

UpVectorОбертка библиотеки для “[UpVectorX, UpVectorY, UpVectorZ]” (3D)Список 2 или 3 выражений, в зависимости от размерности
UpVectorX, UpVectorY, UpVectorZДополнительныйВыражение MuPAD®
KeepUpVectorНаследованныйFALSE, или TRUE

Графические примитивы

ОбъектыЗначения по умолчанию
plot::Camera

UpVector: [0.0, 0.0, 1.0]

UpVectorX, UpVectorY: 0.0

UpVectorZ: 1.0

KeepUpVectorTRUE

Описание

UpVector = [x, y, z] устанавливает 3D вектор, который соответствует вертикальному направлению 2D снимка, сделанного камерой.

UpVectorX и т.д. обозначьте координаты UpVector.

KeepUpVector = TRUE сохраняет UpVector постоянный, когда камера перемещена. С KeepUpVector = FALSE, UpVector сохранен ортогональным к оптической оси, когда камера перемещена.

Снимок, сделанный камерой, задан атрибутами Position (3D положение камеры) и FocalPoint (на 3D точку камера указывают). Вектор от положения до центра является оптической осью камеры.

Как дополнительная степень свободы, камера может вращаться вокруг оптической оси. Это вращение задано путем определения 3D векторного UpVector. В итоговом 2D снимке, сделанном камерой, этот вектор параллелен вертикальной оси, указывая вверх.

Со значением по умолчанию UpVector = [0, 0, 1] z- ось в 3D точках вверх в 2D изображении.

UpVector из камеры не должен быть нуль и не должен быть параллелен оптической оси.

Значениями по умолчанию является UpVector = [0, 0, 1] и KeepUpVector = TRUE.

Ограничение, что UpVector не должно быть параллельно оптической оси, приводит к разрывам, когда камера перемещается таким способом, которым нарушено это ограничение. В таком случае, KeepUpVector = FALSE должен использоваться. См. Пример 2.

Примеры

Пример 1

Мы просматриваем крест трех стрел камерой с обычным UpVector обращение в z- направление:

camera := plot::Camera([0.3, -4.0, 0.2], [0, 0, 0], PI/4,
                       UpVector = [0, 0, 1]):
plot(plot::Arrow3d([-1, 0, 0], [1, 0, 0], Color = RGB::Red),
     plot::Arrow3d([0, -1, 0], [0, 1, 0], Color = RGB::Green),
     plot::Arrow3d([0, 0, -1], [0, 0, 1], Color = RGB::Blue),
     camera)

Мы переопределяем UpVector из камеры, чтобы указать в направление [1, 0, 1]. Теперь это 3D направление становится вертикальным направлением 2D изображения:

camera::UpVector := [1, 0, 1]:
plot(plot::Arrow3d([-1, 0, 0], [1, 0, 0], Color = RGB::Red),
     plot::Arrow3d([0, -1, 0], [0, 1, 0], Color = RGB::Green),
     plot::Arrow3d([0, 0, -1], [0, 0, 1], Color = RGB::Blue),
     camera)

delete camera:

Пример 2

Мы используем анимированную камеру, чтобы пролететь над Северным полюсом планеты с помощью UpVector = [0, 0, 1] по умолчанию. С KeepUpVector = TRUE, мы сталкиваемся с разрывом, когда камера позиционирована точно по северу poly обращение прямо вниз. UpVector параллельно оптической оси в этой точке:

camera := plot::Camera([4*cos(a), 0, 4*sin(a)], [0, 0, 0], PI/4,
                       a = 0..PI, Frames = 300,
                       UpVector = [0, 0, 1], 
                       KeepUpVector = TRUE):
planet := plot::Surface([cos(u)*sin(v), sin(u)*sin(v), cos(v)],
    u = 0..2*PI, v = 0..PI, 
    FillColorFunction = proc(u, v) 
             begin 
               [cos(u)*cos(v)^2, cos(u)*cos(v)^2, cos(u)]
             end_proc):
font := ["sans-serif", 10, RGB::Grey80]:
text1 := plot::Text3d("North", [0, 0, 1.2], TextFont = font):
text2 := plot::Text3d("South", [0, 0, -1.2], TextFont = font):
plot(camera, planet, text1, text2, Scaling = Constrained);

С KeepUpVector = FALSE, ни с каким таким разрывом не сталкиваются. Однако при достижении экватора на темной стороне планеты, UpVector обернулся: верхняя сторона изображения теперь является югом, более низкая сторона является севером:

camera::KeepUpVector := FALSE:
plot(camera, planet, text1, text2, Scaling = Constrained);

delete camera, planet, font, text1, text2:

Смотрите также

Функции MuPAD

Для просмотра документации необходимо авторизоваться на сайте