Иерархия объектов(квадратов) sfml c++

Решил попробовать sfml. Понадобилось сделать объект из нескольких квадратов. Нужно, чтобы он поворачивался,как один объект. Как? Есть пример кода? Насколько я понял по документации нужно сделать иерархию с помощью класса, но как построить дочерние квадраты?


Ответы (1 шт):

Автор решения: norix

Нужно использовать граф сцены, и, если в sfml нет его дефолтной реализации, как например в UE4/Unity, можно сделать самому. Пример тут, в конце: https://www.sfml-dev.org/tutorials/2.5/graphics-transform.php

Чтобы понять происходящее, нужно минимально осознать применение матриц.

  1. Матрица 4х4 (sf::Transform - её обертка) хранит позицию, ориентацию и масштабирование объекта.
  2. Перемножение двух матриц даст новую матрицу, комбинирующую позицию/ориентацию/масштабирование первых двух - это и используется для позиционирование дочерних объектов относительно родительского. Порядок перемножения важен, справа налево: result = mat_3 * mat_2 * mat_1.
  3. [Под капотом] Итоговая матрица перемножается на каждую вершину рисуемого объекта (прямоугольник спрайта в данном случае), в результате вершины искажаются так, словно мы видим подвинутый/повернутый/сжатый (в зависимости от содержания матрицы) объект.

Поправка: так как SFML - 2D библиотека, sf::Transform представляет матрицу 3х3, а не 4х4.

→ Ссылка