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

Wyskalowanie Tekstury w SFML

+1 głos
602 wizyt
pytanie zadane 7 lutego 2016 w C i C++ przez zmiennoimienny Mądrala (5,540 p.)
Witam
Zmagam się z pewnym problemem, mianowicie:
W jaki sposób wyskalować Teksture w SFML? (nie mówię tu o .setScale)  
Przykładowo:
Wejście - Tekstura 20x20
Wyjście - Tekstura 100x100.
W jaki sposób to wykonać?

1 odpowiedź

–1 głos
odpowiedź 7 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)

Nie wiem czy o to Ci chodzi, ale znajdziesz coś o skalowaniu sprita pod "Skalowanie sprajta" - http://cpp0x.pl/kursy/Kurs-SFML-2-x-C++/Podstawy/Przemieszczanie-skalowanie-i-obracanie-sprajtow/484

 

Skalowanie sprajta

Klasa sf::Sprite posiada następujące metody do skalowania:

C/C++

void setScale( float factorX, float factorY );
void setScale( const Vector2f & factors );

void scale( const Vector2f & factor )
void scale( float factorX, float factorY );

const Vector2f & getScale() const;

Jak można zauważyć, SFML pozwala na modyfikowanie wysokości i szerokości obiektu niezależnie od siebie.

Ustawianie skali - metody setScale

setScale ustawia skalowanie obiektu względem oryginalnych rozmiarów.

C/C++

sprajt.setScale( 1, 2 );
sprajt.setScale( sf::Vector2f( 0.5, 0.5 ) );

W pierwszej linii szerokość sprajta pozostaje bez zmian, a wysokość jest 2 razy większa. W drugiej, szerokość i wysokość są 2 razy mniejsze.

Aktualna skala - metoda getScale

Metoda getScale zwraca aktualną skalę w formie obiektu sf::Vector2f. Domyślna skala to 1, 1.

Modyfikowanie skali - metody scale

Metody scale skalują poprzednio wyskalowany obiekt.

C/C++

sprajt.setScale( 1, 2 );
sprajt.scale( 2, 1 );
sprajt.scale( sf::Vector2f( 0.5, 0.5 ) );

Po wykonaniu tego kodu, obraz będzie w naturalnych rozmiarach, ponieważ 1 * 2 * 0.5 = 1.
Oba poniższe zapisy są równoważne:

C/C++

sprajt.scale( 2, 3 );
sprajt.setScale( sprajt.getScale().* 2, sprajt.getScale().* 3 );

komentarz 7 lutego 2016 przez pietrzakacper Mądrala (7,480 p.)
Napisał, że nie chodzi mu o .setScale()
komentarz 7 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)
aaa, nie patrzę. Zmęczony jestem. Sry.
komentarz 7 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)
to co on chce zrobić? Przecież ta metoda robi dokładnie to co on chce... :/
komentarz 7 lutego 2016 przez pietrzakacper Mądrala (7,480 p.)

Chodzi mu o taką funkcję:

sf::Texture getScaledTexture(const sf::Texture & texture, Vector2f scale)

 

Podobne pytania

0 głosów
0 odpowiedzi 373 wizyt
pytanie zadane 26 sierpnia 2020 w Systemy operacyjne, programy przez PanPrezes Obywatel (1,520 p.)
0 głosów
1 odpowiedź 530 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
+1 głos
1 odpowiedź 1,761 wizyt

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,295 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...