Иерархия объектов(квадратов) sfml c++
Решил попробовать sfml. Понадобилось сделать объект из нескольких квадратов. Нужно, чтобы он поворачивался,как один объект. Как? Есть пример кода? Насколько я понял по документации нужно сделать иерархию с помощью класса, но как построить дочерние квадраты?
Ответы (1 шт):
Автор решения: norix
→ Ссылка
Нужно использовать граф сцены, и, если в sfml нет его дефолтной реализации, как например в UE4/Unity, можно сделать самому. Пример тут, в конце: https://www.sfml-dev.org/tutorials/2.5/graphics-transform.php
Чтобы понять происходящее, нужно минимально осознать применение матриц.
- Матрица 4х4 (sf::Transform - её обертка) хранит позицию, ориентацию и масштабирование объекта.
- Перемножение двух матриц даст новую матрицу, комбинирующую позицию/ориентацию/масштабирование первых двух - это и используется для позиционирование дочерних объектов относительно родительского. Порядок перемножения важен, справа налево:
result = mat_3 * mat_2 * mat_1. - [Под капотом] Итоговая матрица перемножается на каждую вершину рисуемого объекта (прямоугольник спрайта в данном случае), в результате вершины искажаются так, словно мы видим подвинутый/повернутый/сжатый (в зависимости от содержания матрицы) объект.
Поправка: так как SFML - 2D библиотека, sf::Transform представляет матрицу 3х3, а не 4х4.