Как стать автором
Обновить

Комментарии 12

Это давным-давно описано хотя бы тем же Боресковым в «Компьютерная графика. Полигональные модели» для широких масс (году так в 2000). И в статье описан вовсе не движок, а только основы 3D преобразований — это библиотека растеризации и преобразований координат. С потерявшимся по дороге текстурированием (которое на ваших картинках-таки есть). К сожалению, всё это будет тормозить даже на самых современных системах без системы эффективного удаления невидимых граней (запустите Duke Nukem 3d for Windows на 1024x768 (или выше) и посмотрите, как уменьшается FPS по сравнению с 320x200 и 640x480 — так тут ещё портал грани отсекает с высокой эффективностью, а представляете, как работать без отсечения будет?).
Да я думаю, тут с реализацией довольно длинно будет, как то не тот формат. На эту тему книги, всё таки, есть.
Согласен, невозможно создать полноценную статью «Создаём собственный программный 3D-движок», потому что это слишком огромное количество информации:
1. Математические объекты и операции с ними (точки, векторы, матрицы, кватернионы).
2. Организация объектов их атрибутов, и операции с ними (движение, вращение, масштабирование).
3. Рендеринг (flustrum, текстуры, материалы, шейдеры).
4. Ввод (Клавиатура, Мышь, Джойстик, VR).
5. Жизненный цикл (сцена, время, Коллизии, ИИ).

Только эти 5 пунктов, тянут на несколько томов статей. Но даже описав их все равно для полноценного движка не будет хватать всяких:
Звука, Освещения, Туманов, Теней, Скриптов, UI, BSP, Порталов, Физики, Карт высот, Поисков путей, Зеркал, Триангуляций, Сети, Видеороликов, и тд.

Ну то уже отдельные вещи, имеется ввиду ведь только отображение 3D пространства на мониторе, так что некоторую часть из приведенного вами списка можно убрать и отдать на аутсорсинг, ну, то есть, ввод и звук — это отдельные заботы :) Но так то, по меньшей мере, нужен OpenGL или D3D. Но начинать то с чего то надо? Вот как раз не хватает часто, для изучения чего то нового, некой «эссенции», основных положений. Те же языки проще изучать, когда берешь основу, главные конструкции, а вдаёшься в мелкие подробности уже по мере надобности.
Спасибо за перевод! Доступное изложение материала по теме основных концепций, без лишних подробностей, что и необходимо новичку. Хорошая статья.
Почти все начинают со своего 3d движка :)
Только почему-то почти никто их не показывает. :)
Смотря что начинать. Лично мне просто любопытно сделать какую нибудь простенькую вещь на GLEW/GLFW, чтобы она перемещалась, вращалась, свистела и п…
> аксиома — это логическое утверждение, считаемое достаточно очевидным для принятия без доказательств. 
Аксиома это скорее правило, по которому строится та или иная теория. Поэтому аксиома считается истиной, так как если это не так, то это будет уже другая теория.

Вряд ли имеет смысл выделять точки и вектора в отдельные типы. Во-первых, иногда точку удобнее воспринимать как её смещение относительно начала координат, и тогда это уже не очень точка. Во-вторых, геометрических смыслов у векторов даже не два, а три: точка, смещение и направление. И если уж использовать отдельные типы, то их надо тоже три, плюс четвёртый ― абстрактный вектор, где в одном месте будут собраны все полезные для работы с векторами математические операции.


Проще работать с абстрактными векторами, не забывая конечно про геометрический смысл каждого конкретного вектора:


  1. Точка. Вектор задаёт её координаты относительно начала координат.


  2. Смещение. Вектор задаёт его направление и дальность. Смещение относительно, к началу координат не привязано.


  3. Направление. Например, нормаль треугольника, нормаль к поверхности в какой-то точке, направление взгляда персонажа, ось вращения. У такого вектора главное ― направление. Длина не принципиальна, но очень удобно, чтобы она всегда была единичной.

Имеется три основных типа преобразований при переводе вектора из одной системы координат в другую: поворот, масштабирование и перенос. Геометрический смысл вектора определяет, какие преобразования к нему нужно применять, а какие не нужно:


  1. К точке надо примерять все три: поворот, масштабирование и перенос.


  2. К смещению только два: поворот и масштабирование. Перенос изменяет длину вектора смещения, а она при переносе меняться не должна.


  3. Для вектора направления важен только поворот. Применение переноса нарушает и направление вектора и его длину. Равномерное по всем осям масштабирование сохранит направление, но нарушит единичную длину; неравномерное масштабирование нарушит всё.
Система координат, которую мы будем использовать, обладает очень ценным свойством: взаимной перпендикулярностью. Это значит, что в пересечении каждой из осей на своей соответствующей плоскости угол между ними равен 90 градусам.

Нашу систему координат можно также назвать «правой»:
[картинка]
Источник: http://viz.aset.psu.edu/gho/sem_notes/3d_fundamentals/html/3d_coordinates.html.

На языке математики это значит, что: X=Y×Z
где × обозначает оператор векторного произведения.

Текст читается так, словно равенство X=Y×Z выполняется только для правосторонней системы координат. Хотя на самом деле в левосторонней оно верно тоже.

спасибо, самые азы на понятном языке
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории