Камера¶
Камера - это виртуальное представление точки обзора, которая определяет, как 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).

* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.