Vector 2, вращение объекта как в иерархий, как? SDL2
Как реализовать вращение объекта на двухмерном пространстве имитируя иерархию объектов | SDL2
Vec2 arranged(x,y);
Vec2 rotated =Vec2::RotateUp(renderSource->transform()->localAngle()*Mathf::Deg2Rad, arranged);
arranged.x -= rotated.x;
arranged.y += rotated.y;
//arranged = Vec2::Perpendicular(arranged);
//Положение по горизонтале
wrapper.dst.x = arranged.x + ((rect.w - wrapper.dst.w) / 2.0f - (point.x - sourcePoint.x) * squarePerPixels);
//Положение по вертикале
wrapper.dst.y = arranged.y + ((rect.h - wrapper.dst.h) / 2.0f + (point.y - sourcePoint.y) * squarePerPixels);
// SDL_RenderCopyF(renderer, renderInfo.texture, (SDL_Rect*)&renderInfo.src, (SDL_FRect*)&dst);
SDL_RenderCopyExF(renderer, wrapper.texture->native(), (SDL_Rect*)&wrapper.src,
reinterpret_cast<SDL_FRect*>(&wrapper.dst), renderSource->transform()->localAngle(), nullptr,
SDL_RendererFlip::SDL_FLIP_NONE);
Центральный объекто смотрит вверх, и его хвост правильный а остальные имеют проблемы
Ответы (1 шт):
Автор решения: Alexandr Kosolobov
→ Ссылка
Самое простое решение -- добавить хвост в иерархию этого насекомого. Выглядеть должно примерно следующим образом:
Monster
- MonsterBody
- MonsterTail
Правка: Исходя из обсуждения предлагаю изменить функцию RotateUp следующим образом:
const Vector2 Vector2::RotateAround(Vector2 center, Vector2 localPosition, float angle)
{
float Sin = Mathf::Sin(angle);
float Cos = Mathf::Cos(angle);
return new Vector2(center.x + (localPosition.x * Sin), center.y +
(localPosition.y * Cos));
}
где localPosition это изначальный вектор смешения объекта относительно center
