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

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