Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek
|
SDL_RenderCopy
SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Użyj tej funkcji, aby skopiować część tekstury na bieżącą powierzchnię rysunkową.
int SDL_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srcrect, const SDL_Rect* dstrect) |
renderer | kontekst graficzny. |
texture | tekstura źródłowa; zobacz do Uwag. |
srcrect | struktura prostokąta źródłowego SDL_Rect lub NULL dla całej tekstury. |
dstrect | struktura prostokąta docelowego SDL_Rect lub NULL dla całej docelowej powierzchni rysunkowej; tekstura zostanie rozciągnięta, aby wypełnić cały docelowy prostokąt. |
#include "SDL.h" #define SHAPE_SIZE 16 int main(int argc, char *argv[]) { SDL_Window* Main_Window; SDL_Renderer* Main_Renderer; SDL_Surface* Loading_Surf; SDL_Texture* Background_Tx; SDL_Texture* BlueShapes; /* Prostokaty do rysowania, które będą określać źródło (wewnątrz tekstury) i cel (na ekranie) przy rysowaniu naszych tekstur. */ SDL_Rect SrcR; SDL_Rect DestR; SrcR.x = 0; SrcR.y = 0; SrcR.w = SHAPE_SIZE; SrcR.h = SHAPE_SIZE; DestR.x = 640 / 2 - SHAPE_SIZE / 2; DestR.y = 580 / 2 - SHAPE_SIZE / 2; DestR.w = SHAPE_SIZE; DestR.h = SHAPE_SIZE; /* Zanim możemy cokolwiek narysować, potrzebujemy okna i kontekstu */ Main_Window = SDL_CreateWindow("SDL_RenderCopy Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 580, 0); Main_Renderer = SDL_CreateRenderer(Main_Window, -1, SDL_RENDERER_ACCELERATED); /* Ładowanie tekstury tła. Ponieważ SDL_LoadBMP() zwraca powierzchnię graficzną, zamieniamy ją w teksturę dla szybkich, przyspieszanych sprzętowo kopiowań bitów. */ Loading_Surf = SDL_LoadBMP("Background.bmp"); Background_Tx = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf); SDL_FreeSurface(Loading_Surf); /* mamy teraz teksturę -> zwalniamy powierzchnię */ /* Ładujemy dodatkową teksturę */ Loading_Surf = SDL_LoadBMP("Blueshapes.bmp"); BlueShapes = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf); SDL_FreeSurface(Loading_Surf); /* Teraz zaczyna się zabawa. To będzie rysowało obracający się wybór niebieskich kształtów na środku ekranu */ int i; int n; for (i = 0; i < 2; ++i) { for(n = 0; n < 4; ++n) { SrcR.x = SHAPE_SIZE * (n % 2); if (n > 1) { SrcR.y = SHAPE_SIZE; } else { SrcR.y = 0; } /* rysuj tło, gdzie NULL dla prostokątów źródła i celu po prostu oznacza "użyj wartości standardowych" */ SDL_RenderCopy(Main_Renderer, Background_Tx, NULL, NULL); /* rysuj bieżący krok animacji naszego kształtu */ SDL_RenderCopy(Main_Renderer, BlueShapes, &SrcR, &DestR); SDL_RenderPresent(Main_Renderer); SDL_Delay(500); } } /* Kontekst graficzny działa dosyć podobnie do dużego płótna: gdy używasz RenderCopy(), nakładasz farbę, za każdym razem nakładając ją na wierzchu. Możesz zmienić sposób wtapiania nowych danych w dane już obecne na ekranie. Gdy twój 'obrazek' jest gotowy, pokazujesz go za pomocą SDL_RenderPresent(). */ SDL_DestroyTexture(BlueShapes); SDL_DestroyTexture(Background_Tx); SDL_DestroyRenderer(Main_Renderer); SDL_DestroyWindow(Main_Window); SDL_Quit(); return 0; } |
Kolor tekstury jest modyfikowany w oparciu o jej modulację koloru ustawioną przez SDL_SetTextureColorMod().
Przezroczystość tekstury jest modyfikowana w oparciu o jej modulację alfa ustawioną przez SDL_SetTextureAlphaMod()
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.