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

question-closed SFML origin, rotacja

0 głosów
248 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez Munvik Dyskutant (8,450 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,500 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 (8,450 p.)
Zrozumiałem dzięki, już kod śmiga :)
0 głosów
odpowiedź 19 lutego 2017 przez C☺ndzi Stary wyjadacz (12,150 p.)
A jak usuniesz trzecią linijkę to jak się rysuje?
komentarz 19 lutego 2017 przez Munvik Dyskutant (8,450 p.)
Podobnie tylko w innym miejscu jest sprite
0 głosów
odpowiedź 19 lutego 2017 przez Criss Mędrzec (171,380 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 (8,450 p.)
Zrozumiałem, dzięki, teraz kod działa tak jak należy
komentarz 19 lutego 2017 przez Criss Mędrzec (171,380 p.)
Przejrzyj sobie klasę sf::Transform. Tzn jej kod.

Podobne pytania

0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 5 czerwca 2016 w C i C++ przez Maciek123233 Gaduła (3,210 p.)
0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
0 głosów
2 odpowiedzi 167 wizyt
pytanie zadane 6 grudnia 2016 w C i C++ przez 10kw10 Pasjonat (22,750 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

66,475 zapytań

113,246 odpowiedzi

239,802 komentarzy

46,618 pasjonatów

Przeglądających: 241
Pasjonatów: 13 Gości: 228

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...