Biblioteka procedur graficznych dla SDL
        Wersja 010


W tym artykule znajdziesz wersję plików bibliotecznych do kolejnych zajęć z nauki programowania grafiki komputerowej.

Opis instalacji środowiska znajdziesz w artykułach OL031, OL032 i OL034.

Poprzednia wersja plików bibliotecznych: : SDL009
Następna wersja plików bibliotecznych: SDL011

Parametry dla konsolidatora Dev-C++:

-lmingw32
-mwindows
-lSDLmain
-lSDL

Pliki biblioteczne

SDL_gfx.h

SDL_gfx.cpp

Opis funkcji i struktur danych


gfx2DAffine(a,b,c,k)
a,b,c  -   współczynniki osi powinowactwa o równaniu ax + by + c = 0
k  - współczynnik powinowactwa

Funkcja oblicza macierz powinowactwa prostokątnego A względem prostej ax + by + c = 0 i o współczynniku powinowactwa k. Zwraca wskaźnik do obliczonej macierzy. Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DCopyPoly(p)

p  -   wskaźnik listy łamanych

Funkcja tworzy kopię listy łamanych i zwraca jej adres - po wykorzystaniu kopię usuwamy. Z funkcji korzystamy przy tworzeniu transformacji geometrycznych, gdy chcemy uzyskać nowy obraz figury bez utraty jej oryginału. Zasada postępowania jest następująca:

  1. W tablicy F mamy figurę, czyli listę łamanych. Konstrukcję tej listy opisuje artykuł OL051.
  2. Tworzymy kopię F w nowej tablicy:
        Sint32 * NF = gfx2DCopyPoly(F);
  3. Tworzymy macierz przekształcenia G.
  4. Wykonujemy przekształcenie geometryczne na kopii figury:
        gfx2DTransform(NF,G);
  5. Rysujemy wynikową figurę:
        gfxDrawPoly(screen,NF,kolor);
  6. Usuwamy niepotrzebne już macierze:
        delete [] NF;
        delete [] G;

gfx2DDrawPoly(s,p,color)

s  -   wskaźnik struktury SDL_Surface
p  - wskaźnik listy łamanych
color  - kolor rysowanych linii

Funkcja rysuje obiekt wektorowy zbudowany z listy łamanych. Konstrukcję tej listy opisuje artykuł OL051.


gfx2DHomoth(xh,yh,k)

xh,yh  -   współrzędne punktu jednokładności
k  - współczynnik skali

Funkcja oblicza macierz jednokładności H względem punktu (xh,yh) i o współczynniku k. Zwraca wskaźnik do obliczonej macierzy przekształcenia.  Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DRot(phi)
phi  -   kąt obrotu podany w radianach

Funkcja oblicza macierz rotacji R - obrotu na płaszczyźnie i zwraca wskazanie do niej.  Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DScale(Sx,Sy)

Sx  - skala na osi OX
Sy  -  skala na osi OY

Funkcja oblicza macierz skalowania S wzdłuż osi OX i OY i zwraca wskazanie do niej. Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DShear(Sx,Sy)

kx  - współczynnik ścinania na osi OX
ky  -  współczynnik ścinania na osi OY

Funkcja oblicza macierz ścinania S wzdłuż osi OX i OY i zwraca wskazanie do niej. Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DTrans(Tx,Ty)
Tx  -  przesunięcie wzdłuż osi OX
Ty  - przesunięcie wzdłuż osi OY

Funkcja oblicza macierz translacji T - przesunięcia na płaszczyźnie i zwraca wskazanie do niej. Po wykorzystaniu macierz powinna zostać usunięta z pamięci.


gfx2DTransform(p,tmx)

p  -   wskaźnik listy łamanych
tmx  - wskaźnik macierzy przekształcenia

Funkcja przekształca współrzędne wierzchołków poszczególnych list łamanych zgodnie z macierzą transformacji. Operację tę wykonujemy zwykle na kopi obiektu tuż przed rysowaniem. Ponieważ współrzędne są zaokrąglane do liczb całkowitych, funkcja nie nadaje się do sekwencyjnej animacji z uwagi na kumulację błędów zaokrągleń.


gfxBoundaryFill(screen,x,y,fcolor,bcolor)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne ziarna wypełniania
fcolor  - 32 bitowy kolor wypełnienia
bcolor  - 32 bitowy kolor konturu ograniczającego wypełniany obszar

Funkcja wypełnia kolorem fcolor obszar wskazany ziarnem x,y. Obszar jest ograniczony konturem (linią) w kolorze bcolor oraz prostokątem obcinającym. Wszystkie piksele o kolorze różnym od bcolor zostaną pomalowane w obszarze na fcolor.


gfxClipHLine(screen,x,y,color,len)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne lewego końca odcinka
color  - 32 bitowy kolor odcinka
len  - długość odcinka w pikselach

Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.


gfxClipLine(screen,x1,y1,x2,y2,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x1, y1  - współrzędne punktu początkowego odcinka
x2, y2  - współrzędne punktu końcowego
color  - 32 bitowy kolor odcinka

Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.


gfxClipLineTo(screen,x,y,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne punktu końcowego odcinka
color  - 32 bitowy kolor odcinka

Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.


gfxClipPlot(screen,x,y,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne rysowanego  punktu
color  - 32 bitowy kolor punktu.

Funkcja rysuje jeden punkt na powierzchni graficznej. Jeśli punkt (x,y) znajduje się poza prostokątem obcinającym w strukturze screen, nie będzie rysowany.


gfxClipRectangle(screen,r,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
r  - wskaźnik struktury SDL_Rect
color  - 32 bitowy kolor ramki

Funkcja rysuje prostokątną ramkę zdefiniowaną strukturą SDL_Rect. Ramka jest obcinana do prostokąta obcinającego w strukturze screen.


gfxClipVLine(screen,x,y,color,len)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne górnego końca odcinka
color  - 32 bitowy kolor odcinka
len  - długość odcinka w pikselach

Funkcja rysuje odcinek pionowy na obszarze graficznym.  Odcinek jest obcinany do prostokąta obcinającego zdefiniowanego w strukturze screen.


gfxCloseFont(f)

f  -   wskaźnik do zainicjowanej struktury gfxFont.

Funkcja zamyka czcionkę bitmapową i zwalnia zajmowaną przez nią pamięć.


gfxDrawChar(screen,f,c,x,y,fcolor,bcolor)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
f  - wskaźnik do zainicjowanej struktury gfxFont
c  - znak do narysowania
x, y  - współrzędne znaku - odnoszą się do lewego górnego rogu matrycy
fcolor  - 32 bitowy kolor tuszu
bcolor  - 32 bitowy kolor tła

Rysuje znak c w kolorze fcolor na tle bcolor na współrzędnych x,y powierzchni graficznej. Jeśli kolory fcolor (tylko dla czcionki bitmapowej) lub bcolor (dla obu typów czcionek - bitmapowej i wektorowej) przyjmą wartość -1, to będą traktowane jako przeźroczyste. Pozwala to rysowanie tekstu bez kasowania tła lub na inne ciekawe efekty graficzne. Rysowana literka powinna w całości mieścić się na powierzchni graficznej. Funkcja zwraca szerokość w pikselach narysowanej literki.


gfxDrawText(screen,f,t,x,y,fcolor,bcolor)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
f  - wskaźnik do zainicjowanej struktury gfxFont
t  - wskaźnik ciągu znaków zakończonych kodem 0
x, y  - współrzędne pierwszego znaku - odnoszą się do lewego górnego rogu matrycy
fcolor  - 32 bitowy kolor tuszu
bcolor  - 32 bitowy kolor tła

Rysuje tekst t w kolorze fcolor na tle bcolor na współrzędnych x,y powierzchni graficznej. Jeśli kolory fcolor (tylko dla czcionki bitmapowej) lub bcolor (dla obu typów czcionek - bitmapowej i wektorowej) przyjmą wartość -1, to będą traktowane jako przeźroczyste. Pozwala to rysowanie tekstu bez kasowania tła lub na inne ciekawe efekty graficzne. Rysowany tekst powinien w całości mieścić się na powierzchni graficznej. Jako wynik funkcja zwraca pozycję x leżącą za wypisanym tekstem. Pozycja ta może zostać wykorzystana do kontynuacji rysowania tekstu w następnym wywołaniu tej funkcji.


gfxFont

type  - określa rodzaj czcionki: 0 - czcionka bitmapowa, 1 - czcionka wektorowa
w  -  liczba bajtów na jeden wiersz matrycy znaku
h  - liczba wierszy w matrycy znaku
cp[ ]  - tablica 256 wskaźników do matryc znaków lub łamanych
cw[ ]  - tablica 256 szerokości znaków

Struktura gfxFont przechowuje matryce bitmapowe literek czcionki bitmapowej lub definicje łamanych dla czcionki wektorowej. Dostęp do matryc lub łamanych jest poprzez tablicę wskaźników cp[ ]. Indeks wskaźnika jest kodem ASCII znaku.


gfxFloodFill(screen,x,y,fcolor)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne ziarna wypełniania
fcolor  - 32 bitowy kolor wypełnienia

Funkcja wypełnia kolorem fcolor obszar wskazany ziarnem x,y. Obszar posiada jednolity kolor oraz jest ograniczony obszarami w innych kolorach i prostokątem obcinającym.


gfxGetPixel(screen,x,y)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne punktu

Funkcja zwraca 32 bitowy kod koloru piksela umieszczonego na pozycji x,y powierzchni graficznej. Współrzędne x i y muszą zawierać się w obszarze graficznym.


gfxHLine(screen,x,y,color,len)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne lewego końca odcinka
color  - 32 bitowy kolor odcinka
len  - długość odcinka w pikselach

Funkcja rysuje odcinek poziomy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze.


gfxLibVersion()

Funkcja zwraca tekst z numerem wersji biblioteki graficznej SDL_gfx. Istnieje tylko dla celów testowych w trakcie instalacji oprogramowania.


gfxLine(screen,x1,y1,x2,y2,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x1, y1  - współrzędne punktu początkowego odcinka
x2, y2  - współrzędne punktu końcowego
color  - 32 bitowy kolor odcinka

Funkcja rysuje odcinek od punktu początkowego (x1,y1) do punktu końcowego (x2,y2) wykorzystując algorytm Bresenhama. Punkt początkowy i końcowy musi zawierać się w powierzchni graficznej.


gfxLineTo(screen,x,y,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne punktu końcowego odcinka
color  - 32 bitowy kolor odcinka

Funkcja rysuje odcinek od punktu początkowego ustawionego przez funkcję gfxMoveTo() lub punktu końcowego ostatniego wywołania funkcji gfxLineTo() do punktu (x,y). Punkt końcowy (x,y) staje się punktem początkowym dla kolejnego wywołania tej funkcji. Umożliwia to rysowanie łamanych, zbudowanych z odcinków połączonych końcami. Punkt początkowy i końcowy rysowanego odcinka muszą zawierać się w powierzchni graficznej screen.


gfxMAdd(n,m,A,B)

n  -   liczba wierszy
m  - liczba kolumn
A,B  - wskaźniki dodawanych macierzy

Funkcja dodaje macierz A do macierzy B i zwraca wskazanie do macierzy wynikowe C. Macierze A ,B zawierają elementy typu double.
Cn x m = An x m + Bn x m


gfxMMul(n,r,A,B)

n  -   liczba wierszy macierzy A i C
m  - liczba kolumn macierzy A i wierszy macierzy B
r  - liczba kolumn macierzy B i C
A,B  - wskaźniki mnożonych macierzy

Funkcja mnoży macierz A przez macierz B i zwraca wskazanie do macierzy wynikowej C.  Macierze A ,B zawierają elementy typu double.
Cn x r = An x m x Bm x r


gfxMoveTo(x,y)

x, y  -  współrzędne nowego początku linii

Funkcja współpracuje z gfxLineTo() oraz gfxClipLine(). Ustawia punkt początkowy odcinka.


gfxOpenFont(filename)

filename  -   nazwa pliku zawierającego definicje matryc.

Funkcja odczytuje z pliku tekstowe definicje matryc czcionki bitmapowej lub definicje łamanych dla czcionki wektorowej i umieszcza je w strukturze gfxFont. Zwraca adres tej struktury lub NULL w przypadku błędów - najczęściej zła nazwa pliku. Struktura pliku jest dokładnie opisana w rozdziałach OL041 i OL042. Przykładowe czcionki:

bmpbold8x8.fnt
bmpnorm8x8.fnt
bmpprop8x8.fnt
bmppropbold8x8.fnt
vecprop9x12.fnt

Wykorzystywane pliki czcionek najlepiej umieścić w tym samym katalogu co program. W przeciwnym razie należy przekazać funkcji gfxOpenFont() pełną ścieżkę dostępu wraz z nazwą pliku wg konwencji stosowanej w danym systemie operacyjnym. Polskie znaki należy zdefiniować zgodnie z kodowaniem systemowym.


gfxPlot(screen,x,y,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne rysowanego  punktu
color  - 32 bitowy kolor punktu.

Funkcja rysuje jeden punkt na powierzchni graficznej. Punkt musi się zawierać w tej powierzchni, tzn jego współrzędne nie mogą wykraczać poza marginesy, w przeciwnym wypadku może dojść do zamknięcia aplikacji z powodu naruszenia praw dostępu do chronionych obszarów pamięci.


gfxRectangle(screen,r,color)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
r  - wskaźnik struktury SDL_Rect
color  - 32 bitowy kolor ramki

Funkcja rysuje prostokątną ramkę zdefiniowaną strukturą SDL_Rect. Ramka w całości musi się zawierać w obszarze graficznym.


gfxTextLength(f,t)

f  - wskaźnik do zainicjowanej struktury gfxFont
t  - wskaźnik ciągu znaków zakończonych kodem 0

Funkcja oblicza szerokość w pikselach podanego jako parametr t tekstu.


gfxVLine(screen,x,y,color,len)

screen  -   wskaźnik do zainicjowanej struktury SDL_Surface.
x, y  - współrzędne górnego końca odcinka
color  - 32 bitowy kolor odcinka
len  - długość odcinka w pikselach

Funkcja rysuje odcinek pionowy na obszarze graficznym. Odcinek w całości powinien się zawierać w tym obszarze.


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2021 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe