🧊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