3D Графика WPF

Компоненты 3D графики

  • Окно просмотра (viewport)
  • Трехмерный объект
  • Источник света
  • Камера

Окно просмотра ViewPort

Для работы с трехмерным содержимым нужен контейнер, который может его в себе разместить. Это класс Viewport3D из пространства имен System.Windows.Controls; Класс производный от FrameworkElement, поэтому может быть размещен в любом месте окна. Этот класс добавляет только два новых свойства: Camera – для указания камеры и Children – для указания всех трехмерных объектов, которые будут участвовать в сцене.

Трехмерные объекты MeshGeometry3D

Окно просмотра может содержать любой объект производный от Visual3D (из пространства имен System.Windows.Media.Media3D). Для того, что бы создать объект, надо начать с построения геометрии. Для построения геометрии есть только один класс — MeshGeometry3D.

MeshGeometry3D Свойства

  • Positions – содержит коллекцию всех точек, определяющих сетку. Каждая точка вершина треугольника.
  • TriangleIndices — Определяет треугольники. Каждый элемент коллекции представляет отдельный треугольник cсылаясь на коллекцию точек Positions
  • Normals – Определяет вектор для каждой вершины. Это нужно для вычисления освещения.
  • TextureCoordinates — Определяет, как текстура будет наложена на трехмерный объект. Представлена в виде коллекции двухмерных точек для каждой трехмерной точки из коллекции Positions.

GeometryModel3D Материалы

Создав MeshGeometry3D, нужно поместить его в оболочку GeometryModel3D. Класс имеет три свойства: Geometry, Material и BackMaterial (для определения поверхностей из которых состоит фигура.)

В WPF включено четыре класса материалов:

  • DiffuseMaterial – Плоская матовая поверхность распределяющая свет равномерно во всех направлениях.
  • SpecularMaterial – Создает блестящую бесцветную поверхность. (отражает свет в противоположном направлении подобно зеркалу)
  • EmissiveMaterial – Материал, который сам излучает свет (этот свет не отражают другие объекты сцены)
  • MaterialGroup – Позволяет комбинировать более одного материала.

Источники света Компонент 3D сцены

  • DirectionLight – Заполняет сцену параллельными лучами.
  • AmbientLight – Наполняет сцену рассеянным светом.
  • PointLight – Свет распространяется во все стороны из одной точки.
  • SpotLite – свет распространяется из одной точки по конусу.

Все источники света наследуются от класса GeometryModel3D. Это значить, что они могут рассматриваться как обычные трехмерные объекты и могут быть помещены в ModelVisual3D, а затем на сцену.

Камера Компонент 3D сцены

  • PerspectiveCamera – камера использующая перспективную проекцию. (Объекты которые находятся дальше от камеры выглядят меньше)
  • OrthographicsCamera — камера с ортогональной проекцией (сохраняет точный масштаб независимо от расположения объектов на сцене)

Основные свойства:

  • Position – место расположения камеры.
  • LookDirection – ориентация камеры, задается трехмерным вектором.

Для того что бы вычислить вектор направления камеры, нужно применить следующую формулу:
[LookDirection] = [Точка интереса] – [Position] Например, координаты камеры (-2,2,2), задача — направить камеру в центр сцены по координатам (0,0,0). LookDirection = (0,0,0) – (-2,2,2) = (2, -2, -2)

Обновлено: 23.06.2021 — 16:19

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.