Comments 12
1. Математические объекты и операции с ними (точки, векторы, матрицы, кватернионы).
2. Организация объектов их атрибутов, и операции с ними (движение, вращение, масштабирование).
3. Рендеринг (flustrum, текстуры, материалы, шейдеры).
4. Ввод (Клавиатура, Мышь, Джойстик, VR).
5. Жизненный цикл (сцена, время, Коллизии, ИИ).
Только эти 5 пунктов, тянут на несколько томов статей. Но даже описав их все равно для полноценного движка не будет хватать всяких:
Звука, Освещения, Туманов, Теней, Скриптов, UI, BSP, Порталов, Физики, Карт высот, Поисков путей, Зеркал, Триангуляций, Сети, Видеороликов, и тд.
Аксиома это скорее правило, по которому строится та или иная теория. Поэтому аксиома считается истиной, так как если это не так, то это будет уже другая теория.
Вряд ли имеет смысл выделять точки и вектора в отдельные типы. Во-первых, иногда точку удобнее воспринимать как её смещение относительно начала координат, и тогда это уже не очень точка. Во-вторых, геометрических смыслов у векторов даже не два, а три: точка, смещение и направление. И если уж использовать отдельные типы, то их надо тоже три, плюс четвёртый ― абстрактный вектор, где в одном месте будут собраны все полезные для работы с векторами математические операции.
Проще работать с абстрактными векторами, не забывая конечно про геометрический смысл каждого конкретного вектора:
Точка. Вектор задаёт её координаты относительно начала координат.
Смещение. Вектор задаёт его направление и дальность. Смещение относительно, к началу координат не привязано.
- Направление. Например, нормаль треугольника, нормаль к поверхности в какой-то точке, направление взгляда персонажа, ось вращения. У такого вектора главное ― направление. Длина не принципиальна, но очень удобно, чтобы она всегда была единичной.
Имеется три основных типа преобразований при переводе вектора из одной системы координат в другую: поворот, масштабирование и перенос. Геометрический смысл вектора определяет, какие преобразования к нему нужно применять, а какие не нужно:
К точке надо примерять все три: поворот, масштабирование и перенос.
К смещению только два: поворот и масштабирование. Перенос изменяет длину вектора смещения, а она при переносе меняться не должна.
- Для вектора направления важен только поворот. Применение переноса нарушает и направление вектора и его длину. Равномерное по всем осям масштабирование сохранит направление, но нарушит единичную длину; неравномерное масштабирование нарушит всё.
Система координат, которую мы будем использовать, обладает очень ценным свойством: взаимной перпендикулярностью. Это значит, что в пересечении каждой из осей на своей соответствующей плоскости угол между ними равен 90 градусам.
Нашу систему координат можно также назвать «правой»:
[картинка]
Источник: http://viz.aset.psu.edu/gho/sem_notes/3d_fundamentals/html/3d_coordinates.html.
На языке математики это значит, что: X=Y×Z
где × обозначает оператор векторного произведения.
Текст читается так, словно равенство X=Y×Z выполняется только для правосторонней системы координат. Хотя на самом деле в левосторонней оно верно тоже.
Создаём собственный программный 3D-движок