Камера¶
Камера - это виртуальное представление точки обзора, которая определяет, как 3D-модель проецируется на 2D-экран. Graphics3DControl
позволяет вам выбирать между изометрической и перспективной камерами, а также управлять свойствами и позицией камеры с помощью кода.
Камера, используемая Graphics3DControl
по умолчанию, является перспективной.
Свойство Graphics3DControl.Camera
позволяет вам получить доступ к текущему объекту камеры. Однако изначально это свойство возвращает значение null
, что означает, что Graphics3DControl
использует камеру по умолчанию (перспектива).
Чтобы получить доступ к объекту camera и настроить его в коде, вам необходимо явно инициализировать свойство Graphics3DControl.Camera
с помощью объекта PerspectiveCamera
или IsometricCamera
.
Перспективная камера¶
Перспективная камера имитирует реалистичное восприятие глубины, проецируя 3D-модель на 2D-плоскость, благодаря чему объекты кажутся меньше по мере удаления.
Перспективная камера установлена по умолчанию в Graphics3DControl. Чтобы получить доступ к объекту камеры и настроить его свойства, свойство Graphics3DControl.Camera
должно быть присвоено объекту PerspectiveCamera
.
xmlns:mx3d="https://schemas.eremexcontrols.net/avalonia/controls3d"
<mx3d:Graphics3DControl Name="g3DControl" ShowAxes="True">
<mx3d:Graphics3DControl.Camera>
<mx3d:PerspectiveCamera FieldOfView="0.9" />
</mx3d:Graphics3DControl.Camera>
</mx3d:Graphics3DControl>
Свойство PerspectiveCamera.FieldOfView
позволяет задать угол обзора перспективной камеры, выраженный в радианах. Значение свойства по умолчанию - MathF.PI/4
.
Изометрическая камера¶
Изометрическая камера поддерживает единый масштаб для всех объектов независимо от их расстояния до камеры.
Установите для свойства Graphics3DControl.Camera
значение объекта IsometricCamera
, чтобы переключиться на изометрическую камеру.
xmlns:mx3d="https://schemas.eremexcontrols.net/avalonia/controls3d"
<mx3d:Graphics3DControl Name="g3DControl" ShowAxes="True">
<mx3d:Graphics3DControl.Camera>
<mx3d:IsometricCamera FarClipPlane="1000"/>
</mx3d:Graphics3DControl.Camera>
</mx3d:Graphics3DControl>
Просмотр предопределенных сцен¶
Graphics3DControl
позволяет вам позиции камеры таким образом, чтобы она смотрела сверху, спереди и с других предопределенных сторон 3D-модели.
Сцена по умолчанию - IsoXYZ
(изометрическая). В изометрической сцене оси X, Y и Z имеют равные пропорции, а углы между осями всегда равны 120 градусам:
Чтобы изменить сцену по умолчанию, используйте свойство Camera.DefaultCameraPosition
объектов PerspectiveCamera
и IsometricCamera
. Для параметра Camera.DefaultCameraPosition
можно задать следующие значения перечисления CameraPosition
:
Down
— Нижняя часть модели. Камера расположена в позиции вдоль отрицательного направления оси Y.Front
— Передняя часть модели. Камера расположена в позиции вдоль положительного направления оси Z.IsoXYZ
— Изометрическая сцена, в которой оси X, Y и Z имеют равные пропорции, а углы между осями всегда равны 120 градусам.Left
— Левая сторона модели. Камера расположена в позиции вдоль отрицательного направления оси X.Rear
— Задняя часть модели. Камера расположена в позиции вдоль отрицательного направления оси Z.Right
— Правая сторона модели. Камера расположена в позиции вдоль положительного направления оси X.Up
— Верхняя часть модели. Камера расположена в позиции вдоль положительного направления оси Y.
Следующий код устанавливает позицию камеры по умолчанию для просмотра правой стороны модели.
<mx3d:Graphics3DControl.Camera>
<mx3d:PerspectiveCamera DefaultCameraPosition="Right" />
</mx3d:Graphics3DControl.Camera>
Во время выполнения программы вы можете использовать следующие элементы для просмотра определенной сцены 3D-модели:
- Метод
Graphics3DControl.LookCameraAtScene
- Свойство
Camera.Position
объектовPerspectiveCamera
иIsometricCamera
.
Вместо использования метода LookCameraAtScene
вы можете визуализировать предопределенные сцены с помощью команды Graphics3DControl.LookCameraAtSceneCommand
. Передайте этой команде значение перечисления CameraPosition
в качестве параметра.
Позиция камеры¶
Классы PerspectiveCamera
и IsometricCamera
наследованы от базового класса Camera
, который предоставляет элементы для получения и настройки позиции и ориентации камеры в трехмерном пространстве:
-
Свойство
Camera.Position
— координаты позиции камеры X, Y и Z.Совет
При установке свойства
Position
убедитесь, что расстояние между камерой и объектом съемки (Camera.Target
) находится в пределах допустимого диапазона, определенногоCamera.MinDistance
иCamera.MaxDistance
. В противном случае модель может стать скрытой. -
Свойство
Camera.Target
— координаты X, Y и Z точки, на которую направлена камера. Целью по умолчанию является начало координат системы (0, 0, 0). Целевая точка автоматически изменяется при панорамировании (сдвиге) модели с использованием методовCamera.MoveLeft
/Camera.MoveUp
и горячих клавиш и жестов мыши . -
Свойство
Camera.UpDirection
— вектор (значениеVector3
), который определяет направление движения камеры вверх. Например, если для параметраUpDirection
установлено значение Vector3(0, 1, 0), ось Y направлена вверх. -
Метод
Camera.LookAt
— одновременно устанавливает цель камеры и направление вверх.
Другие свойства камеры определяют ограничения расстояния и угол обзора:
Camera.NearClipPlane
— Расстояние между камерой и ближней плоскостью отсечения. Объекты, расположенные ближе к этой плоскости отсечения, скрыты. Смотрите такжеFarClipPlane
.Camera.FarClipPlane
— Расстояние между камерой и дальней плоскостью отсечения. Объекты за пределами дальней плоскости отсечения скрыты. Graphics3DControl отображает только те объекты, которые находятся в позиции между ближней и дальней плоскостями отсечения.Camera.MaxDistance
— максимально допустимое расстояние между камерой (Camera.Position
) и целевой точкой (Camera.Target
). СвойстваMaxDistance
иMinDistance
определяют, на каком расстоянии камера может находиться от объекта съемки. Эти свойства влияют на операции масштабирования, выполняемые с использованием методаCamera.MoveForward
, и горячих клавиш и жестов мыши .Camera.MinDistance
— Минимально допустимое расстояние между камерой (Camera.Position
) и целевой точкой (Camera.Target
).
Пример - Установите камеру в пользовательскую позицию¶
Следующий код помещает камеру в позицию (X=40, Y=200, Z=40) и устанавливает для свойства Target
значение Vector3(0, 0, 0), чтобы она указывала вниз в начале системы координат и просматривала верхнюю часть модели. Свойству UpDirection
присвоено значение Vector3(1, 0, 1), что позволяет выровнять оси X и Z по левому верхнему и правому верхнему углам экрана соответственно.
Свойству MaxDistance
присвоено значение 300, гарантирующее, что новое расстояние между камерой и объектом съемки находится в пределах заданного диапазона [MinDistance
, MaxDistance
].
g3DControl.Camera.MaxDistance = 300;
g3DControl.Camera.Position = new Vector3(40, 200, 40);
g3DControl.Camera.Target = new Vector3(0, 0, 0);
g3DControl.Camera.UpDirection = new Vector3(1, 0, 1);
// or
g3DControl.Camera.MaxDistance = 300;
g3DControl.Camera.Position = new Vector3(40, 200, 40);
g3DControl.Camera.LookAt(new Vector3(0, 0, 0), new Vector3(1, 0, 1));
Перемещение и поворот камеры¶
Graphics3DControl поддерживает горячие клавиши и жесты мыши , которые позволяют пользователям перемещать (панорамировать), поворачивать и масштабировать модель (модели) во время выполнения программы. Вы также можете выполнить эти операции в коде, используя следующие методы, предоставляемые объектом Camera
:
MoveForward
— Размещает камеру ближе (положительное смещение) или дальше (отрицательное смещение) от модели.MoveLeft
— сдвигает камеру влево (положительное смещение) или вправо (отрицательное смещение).MoveUp
— Сдвигает камеру вверх (положительное смещение) или вниз (отрицательное смещение).Rotate
— Поворачивает камеру вокруг горизонтальной и вертикальной осей screen space. Точкой поворота является исходная точка системы координат контрола (0, 0, 0).
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.