• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed SFML origin, rotacja

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
813 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez Munvik Dyskutant (9,350 p.)
zamknięte 19 lutego 2017 przez Munvik

Nie mogę pojąć jak dokładnie działa origin

Chciałbym aby obiekt się obracał wokół jego środka bez zmiany pozycji.

Robię coś takiego:

crossbow.setOrigin(crossbow.getGlobalBounds().width / 2, crossbow.getGlobalBounds().height / 2 ); //żeby origin był na środku obiektu
crossbow.setRotation(rot);
crossbow.setOrigin(0.f, 0.f); //powrót, żeby obiekt narysował się na jego pierwotnej pozycji

I nie działa to poprawnie.

komentarz zamknięcia: Złe użycie origin
komentarz 19 lutego 2017 przez QizmoPL Stary wyjadacz (11,440 p.)

3 odpowiedzi

+2 głosów
odpowiedź 19 lutego 2017 przez Pajdas Mądrala (5,930 p.)
Origin to ustawienie tak jakby centrum obiektu.
Najlepszym przykładem jest koło.

Jeżeli stworzysz koło w sfml i umieścisz na pozycji (0,0) to właśnie na tej pozycji będzie lewy górny róg najmniejszej przestrzeni w której mieści się owe koło, ale jeżeli ustawisz origin na pozycji (promień koła, promień koła) a później umieścisz na pozycji 0,0 to zauważysz, że w miejscu 0,0 znajduje się dokładny środek koła.

Jak wiesz pewnie z lekcji fizyki ruch to "zmiana położenia względem układu odniesienia". Układem odniesienia domyślnie ustawionym w SFML jest wspomniany wcześniej lewy górny róg przestrzeni zawierającej obiekt, a funkcja setOrigin() pozwala zmieniać punkt odniesienia.
1
komentarz 19 lutego 2017 przez Munvik Dyskutant (9,350 p.)
Zrozumiałem dzięki, już kod śmiga :)
0 głosów
odpowiedź 19 lutego 2017 przez C☺ndzi Stary wyjadacz (12,100 p.)
A jak usuniesz trzecią linijkę to jak się rysuje?
komentarz 19 lutego 2017 przez Munvik Dyskutant (9,350 p.)
Podobnie tylko w innym miejscu jest sprite
0 głosów
odpowiedź 19 lutego 2017 przez criss Mędrzec (172,590 p.)
edycja 20 lutego 2017 przez criss
To tak nie zadziała. Wszystkie transformacje (rotacja, pozycja, skala i origin) są brane pod uwagę dopiero w chwili renderowania i na ich podstawie wyliczana odpowiednia macierz. Także nie ma znaczenia w jakiej kolejności wywołasz setOrigin, setRotation itd.
komentarz 19 lutego 2017 przez Munvik Dyskutant (9,350 p.)
Zrozumiałem, dzięki, teraz kod działa tak jak należy
komentarz 19 lutego 2017 przez criss Mędrzec (172,590 p.)
Przejrzyj sobie klasę sf::Transform. Tzn jej kod.

Podobne pytania

0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 5 czerwca 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)
0 głosów
0 odpowiedzi 281 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
0 głosów
2 odpowiedzi 450 wizyt
pytanie zadane 6 grudnia 2016 w C i C++ przez 10kw10 Pasjonat (22,880 p.)

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2704p. - Tomasz Bielak
  5. 2678p. - Łukasz Siedlecki
  6. 2627p. - CC PL
  7. 2485p. - Marcin Putra
  8. 2443p. - rucin93
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2127p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...