CameraCoordinates
Положение источников света относительно камеры?
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
Объекты | Значения по умолчанию CameraCoordinates |
---|---|
plot::DistantLight , plot::PointLight , plot::SpotLight | FALSE |
С CameraCoordinates = FALSE
, координаты, задающие положение света, интерпретированы, когда модель координирует на 3 пробелах. Таким образом световые сигналы расположены относительно объектов в сцене. Они не перемещаются, когда камера перемещается.
С CameraCoordinates = TRUE
, эти координаты интерпретированы как “координаты камеры”. Таким образом световые сигналы присоединены к камере и перемещаются автоматически с камерой, когда это перемещено.
Вектор (x, y, z) в “координатах камеры” должен быть интерпретирован можно следующим образом:
x - координата относится к горизонтальной оси изображения, которое вы видите в средстве поиска камеры. Положительные значения x к вашей правой стороне, отрицательным значениям x к вашей левой стороне.
y - координата относится к вертикальной оси изображения, которое вы видите в средстве поиска. Положительные значения y выше вас, отрицательных значений y ниже вас.
z - координата относится к положению вдоль оптической оси камеры. Положительные значения z относятся к точкам перед вами, отрицательными значениями z к точкам позади вас.
В координатах камеры положение камеры (0, 0, 0).
Например, свет точки, расположенный в точку (0, 1, 0) в координатах камеры, является “главной лампой”, зафиксированной на расстоянии 1 выше камеры.
3D график может содержать несколько камер. Изменение состояния CameraCoordinates
поскольку свет влияет на свое отношение ко всем камерам сцены. С CameraCoordinates
= TRUE
, положение света в 3 изменениях пробела, когда новая камера выбрана в интерактивном режиме.
Мы задаем сферу:
sphere := plot::Spherical( [1, u, v], u = 0..2*PI, v = 0..PI, FillColorType = Functional, FillColorFunction = proc(u, v) begin [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0] end_proc):
Мы задаем солнечный свет, сияющий сверху:
sunlight := plot::DistantLight([0, 0, 1], [0, 0, 0]): plot(sphere, sunlight):
Затем солнечный свет задан относительно камеры. В координатах камеры, “выше камеры” дан Position
[0, 1, 0]. Поскольку камера указывает вниз, мы устанавливаем направление солнечного света “позади” камеры также путем выбора направления
[0, 1, -1.5]
w.r.t. камера:
sunlight := plot::DistantLight([0, 1, -1.5], [0, 0, 0], CameraCoordinates = TRUE): plot(sphere, sunlight):
delete sphere, sunlight, pointlight:
Мы задаем ту же сферу как в предыдущем примере:
sphere := plot::Spherical( [1, u, v], u = 0..2*PI, v = 0..PI, FillColorType = Functional, FillColorFunction = proc(u, v) begin [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0] end_proc):
Мы задаем анимированную камеру. Во-первых, мы используем солнечный свет, зафиксированный на пробеле:
camera := plot::Camera([-3*sin(a), -3*cos(a), 2], [0, 0, 0], 0.3*PI, a = 0..2*PI): sunlight:= plot::DistantLight([0, -2, 3], [0, 0, 0]): plot(sphere, camera, sunlight):
Затем мы используем солнечный свет, перемещающийся с камерой:
sunlight:= plot::DistantLight([0, 3, -2], [0, 0, 0], CameraCoordinates = TRUE): plot(sphere, camera, sunlight):
Мы задаем свет точки, который фиксируется к некоторой точке выше камеры:
pointlight := plot::PointLight([0, 1, 0], CameraCoordinates = TRUE): plot(sphere, camera, pointlight):
delete sphere, camera, sunlight, pointlight:
Мы задаем ту же сферу как в предыдущих примерах:
sphere := plot::Spherical( [1, u, v], u = 0..2*PI, v = 0..PI, FillColorType = Functional, FillColorFunction = proc(u, v) begin [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0] end_proc):
Мы задаем анимированный свет точки, который расположен ниже камеры первоначально. Это перемещается в некоторую точку выше камеры во время анимации:
pointlight := plot::PointLight([0, 10*a, 0], a = -1..1, CameraCoordinates = TRUE): plot(sphere, pointlight):
Мы задаем анимированный свет точки, который расположен слева от камеры первоначально. Это перемещается справа от камеры:
pointlight := plot::PointLight([10*a, 0, 0], a = -1 .. 1, CameraCoordinates = TRUE): plot(sphere, pointlight):
delete sphere, pointlight: