Skip to content

Камера

Камера - это виртуальное представление точки обзора, которая определяет, как 3D-модель проецируется на 2D-экран. Graphics3DControl позволяет вам выбирать между изометрической и перспективной камерами, а также управлять свойствами и позицией камеры с помощью кода.

g3d-cameras-perspective-and-isometric

Камера, используемая 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.

g3d-perspectivecamera-fieldofview

Изометрическая камера

Изометрическая камера поддерживает единый масштаб для всех объектов независимо от их расстояния до камеры.

Установите для свойства 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 градусам:

g3d-camera-default-isoxyz

Чтобы изменить сцену по умолчанию, используйте свойство Camera.DefaultCameraPosition объектов PerspectiveCamera и IsometricCamera. Для параметра Camera.DefaultCameraPosition можно задать следующие значения перечисления CameraPosition:

  • Down — Нижняя часть модели. Камера расположена в позиции вдоль отрицательного направления оси Y.
  • Front — Передняя часть модели. Камера расположена в позиции вдоль положительного направления оси Z.
  • IsoXYZ — Изометрическая сцена, в которой оси X, Y и Z имеют равные пропорции, а углы между осями всегда равны 120 градусам.
  • Left — Левая сторона модели. Камера расположена в позиции вдоль отрицательного направления оси X.
  • Rear — Задняя часть модели. Камера расположена в позиции вдоль отрицательного направления оси Z.
  • Right — Правая сторона модели. Камера расположена в позиции вдоль положительного направления оси X.
  • Up — Верхняя часть модели. Камера расположена в позиции вдоль положительного направления оси Y.

Следующий код устанавливает позицию камеры по умолчанию для просмотра правой стороны модели.

g3d-camera-default-right

<mx3d:Graphics3DControl.Camera>
    <mx3d:PerspectiveCamera DefaultCameraPosition="Right" />
</mx3d:Graphics3DControl.Camera>

Во время выполнения программы вы можете использовать следующие элементы для просмотра определенной сцены 3D-модели:

  • Метод Graphics3DControl.LookCameraAtScene
  • Свойство Camera.Position объектов PerspectiveCamera и IsometricCamera.
g3DControl.LookCameraAtScene(CameraPosition.Left);

Вместо использования метода 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 — одновременно устанавливает цель камеры и направление вверх.

g3d-camera-clipping-planes

Другие свойства камеры определяют ограничения расстояния и угол обзора:

  • 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].

g3d-camera-custom-position-example

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).

G3d-camera-rotate-screen-space



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