Компоненты 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)