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

question-closed SFML origin, rotacja

Object Storage Arubacloud
0 głosów
665 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ź 244 wizyt
pytanie zadane 5 czerwca 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)
0 głosów
0 odpowiedzi 242 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
0 głosów
2 odpowiedzi 340 wizyt
pytanie zadane 6 grudnia 2016 w C i C++ przez 10kw10 Pasjonat (22,880 p.)

92,555 zapytań

141,403 odpowiedzi

319,556 komentarzy

61,940 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...