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

question-closed SFML origin, rotacja

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

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...