Зеркальное отражение оси Y в SFML - PullRequest
3 голосов
/ 03 июля 2011

Привет, поэтому я интегрирую box2d и SFML, а box2D имеет ту же нечетную зеркальную систему координат по оси Y, что и SFML, что означает, что все отображается вверх ногами. Можно ли добавить какую-то функцию или небольшой объем кода, который просто отражает содержимое рендера окна?

Я думаю, я могу что-то поместить в sf :: view, чтобы помочь с этим ...

Как я могу легко перевернуть ось Y для целей визуализации, не влияя на размеры / местоположение тел?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Похоже, что ваша модель использует обычную систему координат (положительные координаты y указывают вверх), и вам необходимо перевести ее в экранную систему координат (положительные координаты y указывают вниз).

При копировании модели / положения Box2Dданные в любой sf :: Drawable, преобразуйте вручную между моделью и системой координат экрана:

b2Vec2 position = body->GetPosition();

sprite.SetPosition( position.x, window.GetHeight() - position.y )

Вы можете скрыть это в классе или функции-обертке, но он должен находиться между моделью и средством визуализации какПре-рендеринг преобразования.Я не вижу места, чтобы установить это в SFML.

Я думаю, у Box2D есть нужная вам система координат;просто установите вектор гравитации на основе вашей модели (0, -10) вместо экрана.

2 голосов
/ 28 июля 2011

Я не знаю, что такое box2d, но когда я хотел перевернуть ось Y с помощью openGL, я просто применил отрицательный коэффициент масштабирования к матрице проекции, например:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glScalef(1.0f, -1.0f, 1.0f);

Если вы хотите сделать это независимоиз openGL просто примените sf :: View с отрицательным значением x.

...