🧊32. Алгоритмы трехмерной графики. Алгоритм рисования каркасных моделей.
Операции масштабирования, переноса, поворота.
3D модель - математическое представление трехмерного объекта. Вершина - точка с координатами в пространстве. Ребро - отрезок, соединяющий две вершины.
Каркасная модель
Это модель объекта в трёхмерной графике, представляющая собой совокупность вершин и рёбер, которая определяет форму отображаемого многогранного объекта.
⭐ Полигональная модель
Это объект, который задается набором полигонов (иначе именуемых полигональными гранями) и потому объединяет множество таких однотипных элементов, или подобъектов, как вершины (Vertex), ребра (Edge) и грани (Face).

Операции над моделями
Масштабирование
Перемещение
Поворот относительно начала координат
⭐ Если матрицу переместить и масштабировать то у неё будут одни координаты, а если масштабировать и переместить - то другие. Это выходит из определения умножения матриц - > A*B != B*A.
⭐ Системы координат бывают правыми и левыми. Левые - координаты считаются по часовой стрелке, правые - против.
Матрицы действий
Масштабирование [x, y, z, 1]:
Перемещение [x, y, z, 1]:
Поворот [x, y, z, 1]:
по оX:
y' = y*cos a + z*sin a
z' = -y*sin a+ z*cos a
по оY:
x' = x*cos a
z' = x* sin a + z*cos a
по оZ:
x' = x*cos a + y*sin a
y' = -sin a + cos a
Визуализация 3D поверхности
Поверхность - непрерывное множество точек, координаты которых связаны в декартовой системс координат уравнением вида F(x,y,z) = 0.
Ортогональная проекция точки А на плоскость - это точка А', полученная в месте пересечения перпендикуляра опущенного на эту плоскость и этой плоскости. Если плоскость образованна осями координат - ортогоyальная проекция обнуляет соответствующую компоненту координаты.
⭐ Ортогональная проекция 3D объекта
Это проекция на каждую из осей. На картинке понятнее:
Объекты и методы реализации 3D моделей в Qt
QGraphicsScene scene; //создаем сам объект
QGraphicsView view(&scene); // поле просмотра
view.show(); //выводим
QPen pen(Qt::black); //создаем ручку чёрного цвета
scene -> addRect(0,0,200,200,pen); //создаем прямоугольник
scene -> clear(); //очистка
QPen pen(Qt::white); // снова ручка, теперь белая
scene -> addEllipse(0,0,200,200,pen); //создаем эллипс, в данном случае окружность
Last updated