Hlavní navigace

SVGAlib (15)

Jakub Matys 11. 2. 2005

V dnešním dílu povídání o knihovně svgalib, resp. vgagl, se budeme věnovat základním kreslícím funkcím. Než na ně však "hupsneme", povíme si ještě něco, co jsme nestihli v minulém dílu.

Ještě než se pustíme do samotného kreslení, řekněme si něco málo o dalších funkcích pro nastavení grafického výstupu.

První funkcí je gl_setscreenof­fset. Návratovým typem je void a funkce přebírá jeden argument typu int. Funkce nastaví offset video paměti v pixelech. Offset využívají funkce copyscreen(3), copyboxcontext(3) a copyboxgromcon­text(3). Při použití page-flippingu je nezbytné podle potřeby offset nastavit. Po zavolání funkce copyscreen je offset vrácen na 0.

Další funkcí je gl_setdisplays­tart. Funkce vrací typ vga a přebírá dva argumenty typu int. Tyto argumenty zadávají pozici (x, y), kde bude začínat virtuální obrazovka programu. Tato funkce může být použita ve shodě s hardwarovým rolováním obrazu nebo page-floppingem. Před použitím této funkce se ubezpečte, že šířka zadávaného řádku je menší než šířka fyzické obrazovky nebo stejná.

Když už jsme u page-flippingu, funkce, která jej aktivuje, se jmenuje gl_enablepage­flipping. Vrací int a argumentem je ukazatel na typ GraphicalContext. Funkce tedy povoluje page-flipping, zároveň také umožňuje trojité bufferování ve funkci gl_copyscreen (pokud to však umožňuje grafický kontext). Funkce vrací 3, pokud bylo použito trojité bufferování, 2 pro page-flipping a 0, pokud neuspěla.

Kreslení

A konečně můžeme začít malovat!

První funkce se nám bude určitě velice hodit, vyplní totiž obrazovku zvolenou barvou. Přebírá jeden argument typu int – to je ta barva;o). Jmenuje se gl_clearscreen.

Funkce gl_rgbcolor vrací hodnotu pixelu (typ int), který obsahuje barvu. Barva je funkci předána pomocí třech argumentů typu int v pořadí r, g, b. Hodnota pixelu vrácená funkcí se liší kontext od kontextu. Tuto funkci používá gl_setpixelrgb.

Jednoduchou funkcí pro nastavení barvy pixelu je gl_setpixel. Funkce vrací typ void a přebírá tři argumenty int. První dva udávají umístění pixelu(x,y) a třetí obsahuje barvu pixelu. Barvy nastavené funkcí jsou korektní pouze u módů s méně než 8bitovými barvami.

Další „barvící“ funkcí je gl_setpixelrgb. Funkce přebírá pět argumentů typu int. První dva udávají umístění pixelu (x, y), další pak RGB kombinaci (každá proměnná smí nabývat hodnot v rozmezí 0–255). Pokud používáte 256 barevný mód, má tato funkce smysl, pouze pokud máte nastavenu nějakou RGB paletu (funkce gl_setpalette – man 3).

Občas je nutné zjistit barvu určitého pixelu, tento problém vyřeší funkce gl_getpixel. Argumentem jsou souřadnice zkoumaného pixelu, vrácenou hodnotou pak je int. Vrácená barva je ve formátu použitelném pro aktuální kontext. Funkce vrací -1, pokud souřadnice ukazují mimo ohraničené pole okna.

A jak už bývá zvykem další funkce bude pracovat s barvou v kódování RGB – void gl_getpixelrgb(int x, int y, int *r, int *g, int *b). Tato funkce naplní ukazatele r, g a b hodnotami 0 až 255.

Pokud chcete kreslit přímku, která leží „vodorovně“ s osou x, můžete využít funkce gl_hline. Funkce je typu void a přebírá čtyři parametry (všechny jsou typu int). První udává počáteční bod na ose x, druhý „výšku čáry“, tedy vzdálenost na osey, třetí konečný bod na ose x a konečně čtvrtý barvu, ve které se přímka zobrazí. Nezapomeňte, že hodnota prvního argumentu nesmí být větší než hodnota třetího, jinak funkce neudělá nic.

Přímku ležící „šejdrem“ nakreslíte funkcí gl_line. Ta přebírá pět argumentů typu int. První dvě dvojice obsahují souřadnice krajních bodů, poslední argument udává barvu přímky. Může se stát, že při výměně souřadnicových dvojic nebude dodržena stejná trajektorie přímky.

Pro kreslení kruhu použijte funkci void gl_circle(int x, int y, int r, int c). x a y jsou souřadnice středu kruhu, r je poloměr a c je barva kruhu.

Poslední dnešní funkcí je gl_fillbox. Ta přebírá pět argumentů. První dva jsou souřadnicí počátku kresleného čtyřúhelníku, další dva udávají šířku a výšku a poslední barvu, kterou se čtyřúhelník vyplní.

To by bylo pro dnešek vše, příště se podíváme na použití písem v knihovně.

Našli jste v článku chybu?
Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...