Набор Алгоритмов

Статья посвящена трёхмерной графике. Для понимания материала Вам потребуется знание геометрии и других видов математик. Статья рассказывает, как построить трёхмерные объекты на экране на двух-мерном холсте и ознакомит Вас с уже существующими фрейворками для рендеринга на видеокарте (но на них не всё возможно).

Алгоритмы - Трёх-мерная графика (3D)

1. Введение

Трёх-мерная графика может послужить Вам для моделирования физических процессов, создания реалистичных Трёх-мерных фотографий, создания компьютерных игр и т.п. Отличие её от начертательной геометрии в том, что изображение получается через линзу — есть фокус и горизонт.

Уже есть графические движки импортных производителей, но нет отечественного. Т.к. языковой барьер в рамках биологии не удобен и мешает географическая расположенность, что возможно и для Федеральных округов России, то есть всегда возможность начать использовать свой графический движок.

Эта статья поможет Вам вести не зависимою разработку, хотя и это не обязательно, графического движка для трёх-мерного моделирования.

2. Графические примитивы

Графические примитивы очень важны для моделирования физических процессов, в статье рассмотрено самые малые по сложности математические объекты, когда Вы поймёте концепцию, то можно перейти к более сложным приметивам. Поверхности Безье помогут сделать художественное моделирование в играх и реалистичных трёх-мерных фильмах и фотографиях, также они могут быть использованы для физического моделирования с погрешностью и т.п.

2.1. Система неравенств куба

Рис. 1. Куб проецированный при помощи процессора, а не видеокарты, в ортогональной проекции (не в оптической).

Система неравенств куба длиной стороны два и расположенного в центре:

Система неравенств куба длинной стороны L и расположенного в центре:

2.2. Система неравенств прямоугольного параллепипеда

Система неравенств параллепипеда с центром в начале координат и длиннами сторон Lx, Ly, Lz, по осям соответственно:

2.3. Система неравенств цилиндра

Система неравенств цилиндра, который находиться в центре координат, и имеет радиус r, и высоту h:

2.4. Система неравенств сферы

Система неравенств сферы, который находиться в центре координат и имеет радиус r:

2.5. Поверхность Безье

Рис. 2. Поверхность Безье проецированная при помощи процессора, а не видеокарты, в ортогональной проекции (не в оптической).

Поверхности Безье — это поверхность замкнутая кривыми Безье и интерполируемая ими же. Вспомним многочлен Безье из статьи кривые Безье:

Но здесь многочлен повторяется по всем трём осям и является кривой в пространстве:

* замечание: Pki — в многочленах Bi, выбранные соответствующие значения для оси координаты точки (кортежа).

Многочлен Безье в любом Базисе это Кривая Безье.

2.5.1. Полигоны Безье

Полигоны — это такие поверхности Безье, которые замкнуты кривыми Безье первого порядка (линейными кривыми Безье). Из них составляются сложные фигуры. Кстати, полигоны - это не обязательно многочлены Безье, это также и прямые поверности замкнутые прямыми или кривыми (это могут быть просто наклонённые многоугольники или плоские поверхности замкнутые, допустим, функциями).

2.5.2. Кривые поверхности

Кривые — это поверхности, которые замкнуты, как минимум, квадратичной кривой Безье в сочетании с линейными кривыми Безье, или сочетания более высокого порядка. Из них составляются сложные фигуры. Также чаще используются поверхности, которые замкнуты функциями (падаболами, гиперболами и т.п).

2.6. Классические полигоны

Это просто прямые поверхности замкнутые в нескольких точках.

2.7. Функциональные поверхности

Это просто поверхности заданные точками, через которые проходят функции.

2.8. Другие примитивы и части поверхностей, заключение

Существуют и другие примитивы, и фигуры, и полигоны для образования художественных элементов и сложных фигур, как составных, так не составных, просто запишите их в виде системы уравнений или других математик.

В заключение 2-го раздела могу сказать — научитесь представлять объекты в виде систем уравнений (они могут быть такие: или тоже: ). Советую изучить все виды математик (купить учебники в местном книжном, на ярмарке книг, в интернет магазине или изучить в местном университете).

3. Проекция

3.1. Ортогональная проекция

Классическая проекция для чертежей в начертательной геомитрии и планеметрии. Проекция отличается тем, что лучи на матрицу приёмник падают по прямой линии, все пердипекулярно камере.

3.2. Проекция через линзу

Проецирование происходит не по законам начертательно геометрии, а геометрии и оптики, т.к. так безопаснее для психики.

Далее опишем проецирование через линзу (учитывая, что все объекты заданы с помощью геометрии).

Опишем рисунок:

Снала свет поступает от горы, который отражается от неё (свет, который поступил от источника света, в данном случае от Солнца), далее линейно распространяется до линзы, заранее проходя через точку фокусировки, доходит до точки следующей фокусировки и попадает после на квадратную матрицу, вырезающую часть круга, образованного линзой, в цирвом фотоаппарате это матрица фоторезисторов.

Можно, на компьютере, поставить матрицу (таблицу точек(квадратов)) до первой точки фокусировки, это не мозможно сделать на фоотоаппарате — мешает байонет, т.к. это реальные передаточные механизмы (что-то комбинируемо, что-то нет — главное получить компановку всех возможных вариантов).

4. Программа для получения изображений в статье

В данном разделе приведена программа для получения рисунков куба и поверхностей Безье. Программа написана на C# WPF и использует рисование на двух-мерном холсте.

В заключение раздела предоставляю исходный код программы для рисования рисунков куба и поверхности Безье: Программа для рисования графических примитивов. Программа написана на C# WPF, программа генерирует картинки попиксельно на холсте пикселей. Программа записывает картинки в корень расположения исполняемого файла. Программа испукает лучи равных 1 точке по ширине из каждого пикселя двухмерного массива точек. Второй способ испускание кадра с тем же самым количеством квадратов, что и в матрице фокусировки (через линзу) не готов, допишите его сами или, лучше, изучити фреймворки для 3D-графики. Программа предназначена для получения этих двух картинок, но Вы можете развить её. Очень примичательно то, что программа программа отображает все графические примитивы и функциональные поверхности, и многое другое, но требует титаническое время для этого, но вы можете распарралелить её.

5. Фреймфорки и приложения для трёх-мерной графики

В данном разделе рассматриваются графические редакторы и библиотеки для программирования трёх-мерной графики.

5.1. 3ds Max

Сайт: https://www.autodesk.ru/products/3ds-max/overview

Мощный инструмент для 3D-моделирования и самый долго присутствующий на рынке, платный.

3ds Max предоставляет обширный гибкий инструментарий для создания первоклассных проектов с полным контролем художественного замысла.

5.2. Maya

Сайт: https://www.autodesk.ru/products/maya/overview

3D-редактор аналогичный 3ds Max.

Создание безграничных миров, сложных персонажей в Maya.

5.3. AutoCAD

Сайт: https://www.autodesk.ru/products/autocad/overview

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

AutoCAD — это программное обеспечение автоматизированного проектирования (САПР), с помощью которого архитекторы, инженеры и строители создают точные 2D- и 3D-чертежи.

5.4. Blender

Сайт: https://www.blender.org/

Самый мощный бесплатный редактор для 3D-графики.

Blender - это бесплатный пакет для создания 3D-изображений с открытым исходным кодом. Он поддерживает весь конвейер 3D - моделирование, оснастку, анимацию, симуляцию, рендеринг, композицию и отслеживание движения, редактирование видео и конвейер 2D-анимации.

5.5. OpenGL

Сайт: https://www.opengl.org/

Низкоуровневая библиотека для Windows и Linux для трёх-мерной графики.

OpenGL - это лучшая среда для разработки портативных интерактивных приложений с 2D- и 3D-графикой. С момента своего появления в 1992 году OpenGL стал наиболее широко используемым и поддерживаемым в отрасли интерфейсом программирования приложений (API) 2D и 3D графики, в результате чего тысячи приложений доступны для самых разных компьютерных платформ. OpenGL способствует инновациям и ускоряет разработку приложений за счет включения широкого набора функций визуализации, наложения текстур, специальных эффектов и других мощных функций визуализации. Разработчики могут использовать возможности OpenGL на всех популярных платформах настольных компьютеров и рабочих станций, обеспечивая широкое развертывание приложений.

5.6. DirectX

Сайт: https://docs.microsoft.com/en-us/windows/win32/directx

Библиотека для трёх-мерной графики с низкоуровневым API для Windows.

DirectX (от англ. direct — прямой, непосредственный, произносится как «ДайректЭкс») — это набор API, разработанных для решения задач, связанных с программированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр.

5.7. UnrealEngine

Сайт: https://www.unrealengine.com/

Unreal Engine — это самый открытый и продвинутый инструмент для создания 3D в реальном времени. Постоянно развиваясь, чтобы служить не только своей первоначальной цели в качестве современного игрового движка, сегодня он дает создателям из разных отраслей свободу и контроль для предоставления передового контента, интерактивного опыта и иммерсивных виртуальных миров.

5.8. Unity3D

Сайт: https://docs.unity3d.com/Manual/index.html

Unity3D — это мощный кроссплатформенный 3D-движок и удобная среда разработки. Достаточно простой для новичка и достаточно мощный для эксперта; Unity должна заинтересовать всех, кто хочет легко создавать 3D-игры и приложения для мобильных устройств, настольных компьютеров, Интернета и консолей.

6. Заключение.

Уравнения геометрических фигур приведены на вскидку, в длине допускаяется наличие длины в точках +1, т.к. ещё включается точка с координатами (0, 0, 0).

В заключение могу пожелать Вам написание собственного трёхмерного интерфейса программирования программы, сейчас есть только DirectX и OpenGL, или ответвлений от них, или перейти к программированию компьютерных игр, и т.п..