Статья посвящена трёхмерной графике. Для понимания материала Вам потребуется знание геометрии и других видов математик. Статья рассказывает, как построить трёхмерные объекты на экране на двух-мерном холсте и ознакомит Вас с уже существующими фрейворками для рендеринга на видеокарте (но на них не всё возможно).
Трёх-мерная графика может послужить Вам для моделирования физических процессов, создания реалистичных Трёх-мерных фотографий, создания компьютерных игр и т.п. Отличие её от начертательной геометрии в том, что изображение получается через линзу — есть фокус и горизонт.
Уже есть графические движки импортных производителей, но нет отечественного. Т.к. языковой барьер в рамках биологии не удобен и мешает географическая расположенность, что возможно и для Федеральных округов России, то есть всегда возможность начать использовать свой графический движок.
Эта статья поможет Вам вести не зависимою разработку, хотя и это не обязательно, графического движка для трёх-мерного моделирования.
Графические примитивы очень важны для моделирования физических процессов, в статье рассмотрено самые малые по сложности математические объекты, когда Вы поймёте концепцию, то можно перейти к более сложным приметивам. Поверхности Безье помогут сделать художественное моделирование в играх и реалистичных трёх-мерных фильмах и фотографиях, также они могут быть использованы для физического моделирования с погрешностью и т.п.
Рис. 1. Куб проецированный при помощи процессора, а не видеокарты, в ортогональной проекции (не в оптической).
Система неравенств куба длиной стороны два и расположенного в центре:
Система неравенств куба длинной стороны L и расположенного в центре:
Система неравенств параллепипеда с центром в начале координат и длиннами сторон Lx, Ly, Lz, по осям соответственно:
Система неравенств цилиндра, который находиться в центре координат, и имеет радиус r, и высоту h:
Система неравенств сферы, который находиться в центре координат и имеет радиус r:
Рис. 2. Поверхность Безье проецированная при помощи процессора, а не видеокарты, в ортогональной проекции (не в оптической).
Поверхности Безье — это поверхность замкнутая кривыми Безье и интерполируемая ими же. Вспомним многочлен Безье из статьи кривые Безье:
Но здесь многочлен повторяется по всем трём осям и является кривой в пространстве:
* замечание: Pki — в многочленах Bi, выбранные соответствующие значения для оси координаты точки (кортежа).
Многочлен Безье в любом Базисе это Кривая Безье.
Полигоны — это такие поверхности Безье, которые замкнуты кривыми Безье первого порядка (линейными кривыми Безье). Из них составляются сложные фигуры. Кстати, полигоны - это не обязательно многочлены Безье, это также и прямые поверности замкнутые прямыми или кривыми (это могут быть просто наклонённые многоугольники или плоские поверхности замкнутые, допустим, функциями).
Кривые — это поверхности, которые замкнуты, как минимум, квадратичной кривой Безье в сочетании с линейными кривыми Безье, или сочетания более высокого порядка. Из них составляются сложные фигуры. Также чаще используются поверхности, которые замкнуты функциями (падаболами, гиперболами и т.п).
Это просто прямые поверхности замкнутые в нескольких точках.
Это просто поверхности заданные точками, через которые проходят функции.
Существуют и другие примитивы, и фигуры, и полигоны для образования художественных элементов и сложных фигур, как составных, так не составных, просто запишите их в виде системы уравнений или других математик.
В заключение 2-го раздела могу сказать — научитесь представлять объекты в виде систем уравнений (они могут быть такие: или тоже:
). Советую изучить все виды математик (купить учебники в местном книжном, на ярмарке книг, в интернет магазине или изучить в местном университете).
Классическая проекция для чертежей в начертательной геомитрии и планеметрии. Проекция отличается тем, что лучи на матрицу приёмник падают по прямой линии, все пердипекулярно камере.
Проецирование происходит не по законам начертательно геометрии, а геометрии и оптики, т.к. так безопаснее для психики.
Далее опишем проецирование через линзу (учитывая, что все объекты заданы с помощью геометрии).
Опишем рисунок:
Снала свет поступает от горы, который отражается от неё (свет, который поступил от источника света, в данном случае от Солнца), далее линейно распространяется до линзы, заранее проходя через точку фокусировки, доходит до точки следующей фокусировки и попадает после на квадратную матрицу, вырезающую часть круга, образованного линзой, в цирвом фотоаппарате это матрица фоторезисторов.
Можно, на компьютере, поставить матрицу (таблицу точек(квадратов)) до первой точки фокусировки, это не мозможно сделать на фоотоаппарате — мешает байонет, т.к. это реальные передаточные механизмы (что-то комбинируемо, что-то нет — главное получить компановку всех возможных вариантов).
В данном разделе приведена программа для получения рисунков куба и поверхностей Безье. Программа написана на C# WPF и использует рисование на двух-мерном холсте.
В заключение раздела предоставляю исходный код программы для рисования рисунков куба и поверхности Безье: Программа для рисования графических примитивов. Программа написана на C# WPF, программа генерирует картинки попиксельно на холсте пикселей. Программа записывает картинки в корень расположения исполняемого файла. Программа испукает лучи равных 1 точке по ширине из каждого пикселя двухмерного массива точек. Второй способ испускание кадра с тем же самым количеством квадратов, что и в матрице фокусировки (через линзу) не готов, допишите его сами или, лучше, изучити фреймворки для 3D-графики. Программа предназначена для получения этих двух картинок, но Вы можете развить её. Очень примичательно то, что программа программа отображает все графические примитивы и функциональные поверхности, и многое другое, но требует титаническое время для этого, но вы можете распарралелить её.
Сайт: https://www.autodesk.ru/products/3ds-max/overview
Мощный инструмент для 3D-моделирования и самый долго присутствующий на рынке, платный.
3ds Max предоставляет обширный гибкий инструментарий для создания первоклассных проектов с полным контролем художественного замысла.
Сайт: https://www.autodesk.ru/products/maya/overview
3D-редактор аналогичный 3ds Max.
Создание безграничных миров, сложных персонажей в Maya.
Сайт: https://www.autodesk.ru/products/autocad/overview
Приложение для чертежей и создания по ним трёх-мерных объектов.
AutoCAD — это программное обеспечение автоматизированного проектирования (САПР), с помощью которого архитекторы, инженеры и строители создают точные 2D- и 3D-чертежи.
Сайт: https://www.blender.org/
Самый мощный бесплатный редактор для 3D-графики.
Blender - это бесплатный пакет для создания 3D-изображений с открытым исходным кодом. Он поддерживает весь конвейер 3D - моделирование, оснастку, анимацию, симуляцию, рендеринг, композицию и отслеживание движения, редактирование видео и конвейер 2D-анимации.
Сайт: https://www.opengl.org/
Низкоуровневая библиотека для Windows и Linux для трёх-мерной графики.
OpenGL - это лучшая среда для разработки портативных интерактивных приложений с 2D- и 3D-графикой. С момента своего появления в 1992 году OpenGL стал наиболее широко используемым и поддерживаемым в отрасли интерфейсом программирования приложений (API) 2D и 3D графики, в результате чего тысячи приложений доступны для самых разных компьютерных платформ. OpenGL способствует инновациям и ускоряет разработку приложений за счет включения широкого набора функций визуализации, наложения текстур, специальных эффектов и других мощных функций визуализации. Разработчики могут использовать возможности OpenGL на всех популярных платформах настольных компьютеров и рабочих станций, обеспечивая широкое развертывание приложений.
Сайт: https://docs.microsoft.com/en-us/windows/win32/directx
Библиотека для трёх-мерной графики с низкоуровневым API для Windows.
DirectX (от англ. direct — прямой, непосредственный, произносится как «ДайректЭкс») — это набор API, разработанных для решения задач, связанных с программированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр.
Сайт: https://www.unrealengine.com/
Unreal Engine — это самый открытый и продвинутый инструмент для создания 3D в реальном времени. Постоянно развиваясь, чтобы служить не только своей первоначальной цели в качестве современного игрового движка, сегодня он дает создателям из разных отраслей свободу и контроль для предоставления передового контента, интерактивного опыта и иммерсивных виртуальных миров.
Сайт: https://docs.unity3d.com/Manual/index.html
Unity3D — это мощный кроссплатформенный 3D-движок и удобная среда разработки. Достаточно простой для новичка и достаточно мощный для эксперта; Unity должна заинтересовать всех, кто хочет легко создавать 3D-игры и приложения для мобильных устройств, настольных компьютеров, Интернета и консолей.
В заключение могу пожелать Вам написание собственного трёхмерного интерфейса программирования программы, сейчас есть только DirectX и OpenGL, или ответвлений от них, или перейти к программированию компьютерных игр, и т.п..