#c #rotation #sfml
#c #вращение #sfml
Вопрос:
У меня есть прямоугольник r
размером 1536×720, который я поворачиваю вокруг его собственной центральной точки p(768, 360)
, что достаточно просто с помощью встроенной функции sf :: Sprite ::rotate
Теперь по несвязанным причинам я должен разделить прямоугольник на 6 меньших прямоугольников (каждый размером 512×360).
Эти меньшие прямоугольники — это просто r
разрезанный прямоугольник большего размера; они расположены таким образом, что «сшитые вместе» они образуют исходный прямоугольник (так что похоже, что это все еще оригинальный большой прямоугольник)
Иллюстрация: изображение
Поскольку прямоугольник r
постоянно вращался вокруг своего собственного центра, разделение его на меньшие прямоугольники создало проблему:
Как мне повернуть сшитый прямоугольник (т. Е. Меньшие прямоугольники) вокруг исходного центра p
, чтобы сохранить исходный больший прямоугольник? Возможно ли это вообще?
Мой английский не так уж хорош, поэтому его немного сложно объяснить. Если вам нужно больше объяснений, я могу нарисовать сценарий в paint или что-то в этом роде
Ответ №1:
Вы можете использовать sf::Transformable::setOrigin
, чтобы установить начало преобразования каждого маленького прямоугольника в центральную точку большого.
Обратите внимание, что он станет источником всех преобразований, например. маленькие прямоугольники также будут масштабироваться относительно этого нового центра, но, вероятно, это желаемое поведение.
Комментарии:
1. Означает ли это, что мне все равно нужно поворачивать каждый маленький прямоугольник так, как я бы повернул большой прямоугольник? Итак, поверните каждый маленький прямоугольник, а затем используйте sf::Transformable::setOrigin?
2. Да,
setOrigin
сначала только вы, а затем поворачивайте их по своему усмотрению. Я должен сказать, что обычно вы используете иерархию преобразований для достижения этой цели, но для этого вам нужно предоставить свой фактический код.3. Понятно, спасибо! Я попробую это сейчас и посмотрю, смогу ли я заставить его работать
4. Это работает. Я использую следующий код sf::Transform rot; rot.rotate(0.5, 768, 360); … sprites_.at (i).setPosition(поворот.Точка преобразования (sprites_.at (i).GetPosition())); sprites_.at (i).поворот (0,5f);