Hlavní navigace

OpenGL Imaging Subset (10)

4. 5. 2004
Doba čtení: 10 minut

Sdílet

V závěrečné části seriálu pojednávajícím o OpenGL Imaging Subsetu si popíšeme všechna témata i demonstrační příklady, které jsme si probrali v minulých částech. Dále budou uvedeny seznamy funkcí OpenGL Imaging Subsetu s odkazy na díly, ve kterých jsou tyto funkce popsány. Ke konci článku bude stručně nastíněn obsah navazujících seriálů o počítačové grafice.

Obsah

Poznámky k organizaci této stránky
Obsah jednotlivých dílů
Seznam demonstračních příkladů
Odkazy na příkazy OpenGL Imaging Subsetu rozdělené podle jednotlivých dílů
Odkazy na příkazy OpenGL Imaging Subsetu setříděné podle abecedy
Nastínění témat navazujících článků o multiplatformní počítačové grafice
 

Poznámky k organizaci této stránky

Vzhledem k poměrně velkému počtu dílů a demonstračních příkladů jsou na začátku každé kapitoly uvedeny lokální odkazy pro rychlý skok k popisu dílu nebo příkladu. Jednotlivé části jsou označeny římskými číslicemi (například I-X), demonstrační příklady dvojicí arabských čísel (například 4.1).

Obsah jednotlivých dílů

I

  II   III   IV   V   VI  

VII   VIII   IX   X  

I. Význam Imaging Subsetu, vztah Imaging Subsetu a OpenGL

Datum vydání 02. 03. 2004
Odkaz: /clanek/2068
Obsah: Význam OpenGL Imaging Subsetu, kompatibilita a dostupnost Imaging Subsetu. Rozdělení funkcí Imaging Subsetu do skupin podle jejich významu. Funkce provádějící blokový přenos pixelů (opakování). Typy pixelů, které se mohou ukládat do framebufferu nebo do textury.

II. Změna hodnot během přenosu pixelů a fragmentů

Datum vydání 09. 03. 2004
Odkaz: /clanek/2079
Obsah: Způsob změny hodnot pixelů během jejich přenosu z a do framebufferu. Popis operací prováděných v základním OpenGL i v rozšířeném OpenGL Imaging Subsetu. Nastavení parametrů u modulů, které provádějí změnu hodnot pixelů. Způsob zpracování pixelů nesoucích informaci o barvě, o indexu do palety, o hloubce a o šabloně.

III. Pixel Look-Up tables

Datum vydání 16. 03. 2004
Odkaz: /clanek/2092
Obsah: Význam a způsob využití vyhledávacích tabulek při změně hodnot pixelů zapisovaných do framebufferu. Způsob práce s vyhledávacími tabulkami, změna hodnot ve vyhledávacích tabulkách, získání nastavených parametrů. Umístění vyhledávacích tabulek ve vykreslovacím řetězci.

IV. Práce s barvovými paletami 1

Datum vydání 23. 03. 2004
Odkaz: /clanek/2106
Obsah: Význam barvových palet při zápisu rastrových obrazů do framebufferu. Způsob práce s barvovými paletami, zadání hodnot do barvové palety. Specifikace pixmapy pro naplnění barvové palety. Získání hodnot z dříve nastavené barvové palety, povolení a zákaz použití barvové palety.

V. Práce s barvovými paletami 2

Datum vydání 30. 03. 2004
Odkaz: /clanek/2120
Obsah: Způsob nastavení parametrů, které ovlivňují naplnění barvové palety, tj. jednotlivé zapisované hodnoty. Popis operací určených pro zjištění nastavených parametrů, změnu barvové palety a načtení barvové palety přímo z framebufferu. Změna pouze určité části barvové palety.

VI. Konvoluční filtry 1

Datum vydání 06. 04. 2004
Odkaz: /clanek/2134
Obsah: Vysvětlení pojmu konvoluční filtr. Význam konvolučních filtrů při práci s rastrovým obrazem, parametry ovlivňující nastavení konvolučních filtrů. Dvojdimenzionální konvoluční filtr, příklady jednoduchých dvojdimenzionálních konvolučních filtrů.

VII. Konvoluční filtry 2

Datum vydání 13. 04. 2004
Odkaz: /clanek/2145
Obsah: Jednodimenzionální konvoluční filtr, separovatelný dvojdimenzionální konvoluční filtr, význam těchto filtrů, výhody, nevýhody. Získání hodnot konvolučních filtrů přímo z framebufferu, zpětné načtení parametrů aktuálně nastaveného konvolučního filtru. Povolení a zákaz aplikace konvolučních filtrů na vykreslovaný rastrový obraz.

VIII. Histogram

Datum vydání 20. 04. 2004
Odkaz: /clanek/2158
Obsah: Vysvětlení pojmu histogram, práce s histogramem. Vytvoření tabulky histogramu, povolení a zákaz plnění histogramu, získání hodnot zapsaných do histogramu. Automatické a manuální vynulování hodnot v tabulce histogramu, získání dříve nastavených parametrů histogramu.

IX. Minmax tabulky

Datum vydání 27. 04. 2004
Odkaz: /clanek/2169
Obsah: Vysvětlení pojmu minmax tabulka. Vytvoření minmax tabulky, přečtení hodnot z minmax tabulky, vymazání hodnot z této tabulky. Získání parametrů vytvořených minmax tabulek. Povolení a zákaz používání minmax tabulek.

X. Obsah jednotlivých dílů, seznam příkladů a funkcí

Datum vydání 04. 05. 2004
Odkaz: /clanek/2183
Obsah: Seznam jednotlivých dílů a demonstračních příkladů.

Seznam demonstračních příkladů

1.1

  3.1   3.2   3.3  

3.4   4.1   4.2   5.1   5.2   6.1  

6.2   6.3   7.1   7.2   7.3   7.4  

8.1   8.2   9.1   9.2  

Demonstrační příklad 1.1

V tomto příkladu se po inicializaci OpenGL a následném renderingu kontextu OpenGL provede dotaz na podporovaná rozšíšení. Tato rozšíření (či alespoň jejich část) se vypíší do vytvořeného okna a současně i na konzoli.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is1_1.html

Demonstrační příklad 3.1

Tento demonstrační příklad představuje základ pro další příklady k OpenGL Imaging Subsetu. Po překladu a spuštění tohoto programu se načte známý obrázek Leny (tedy pouze ta nejvíce známá část, zbytek hledejte na Googlu – The Complete Story of Lenna). Tento obrázek se bez dalšího zpracování zobrazí v okně aplikace. Pro zobrazení se používá již dříve popsaná funkce glDrawPixels().

Odkaz: /clanek/photos/o­pengl_is/open­gl_is3_1.html

Demonstrační příklad 3.2

Tento demonstrační příklad navazuje na příklad předchozí. Při přenosu pixelů z operační paměti počítače do framebufferu se však provádí změna kontrastu, tj. vynásobení RGB hodnot pixelů nějakou konstantou. Tuto možnost jsme si ukázali ve druhé části tohoto seriálu při popisu funkce glPixelTransfe­ri(). Kontrast lze měnit pomocí myši na zobrazených posuvnících.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is3_2.html

Demonstrační příklad 3.3

Demonstrační příklad 3.3 navazuje na příklad první i druhý. Při přenosu pixelů z operační paměti počítače do framebufferu se provádí změna jasu, tj. k RGB hodnotám pixelů se přičte nějaká konstanta. Tuto možnost jsme si taktéž ukázali ve druhé části tohoto seriálu při popisu funkce glPixelTransfe­ri(). Kontrast lze měnit pomocí myši na zobrazených posuvnících.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is3_3.html

Demonstrační příklad 3.4

Demonstrační příklad 3.4 ukazuje použití LUT tabulek při překódování barev pixelů, které jsou posílány do vykreslovacího řetězce. Před vykreslením obrázku jsou vytvořeny tři LUT tabulky pro jednotlivé barvy R, G a B. V tabulkách je uložena část jednoduché „kolísavé“ funkce, což se projeví změnou barevného podání celého obrázku.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is3_4.html

Demonstrační příklad 4.1

V příkladu 4.1, který zobrazuje obrázek Leny pomocí funkce glDrawPixels(), je použita barvová paleta pro inverzi jedné barvové složky.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is4_1.html

Demonstrační příklad 4.2

V demonstračním příkladu 4.2, je barvová paleta použita pro inverzi všech barev – výsledkem je tedy barevný negativ původního obrázku.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is4_2.html

Demonstrační příklad 5.1

Po překladu a spuštění demonstračního příkladu 5.1 se zobrazí obrázek Leny. Zobrazení se provádí pomocí nám již známé funkce glDrawPixels(), ale s modifikací barvové palety, která se provádí pomocí příkazu glColorTable(). Tento příkaz je vyvolán ve funkci prepareColorTa­ble().

Odkaz: /clanek/photos/o­pengl_is/open­gl_is5_1.html

Demonstrační příklad 5.2

Demonstrační příklad 5.2 je prakticky totožný s příkladem 5.1. Jediný rozdíl spočívá v tom, že se při výpočtu gama křivky používá exponent menší než jedna. Výsledek je přesně opačný než u prvního příkladu: zvyšuje se kontrast tmavých barev a obrázek se současně jeví poněkud světlejší.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is5_2.html

Demonstrační příklad 6.1

V demonstračním příkladu 6.1 je na vykreslovaný obrázek aplikován filtr pro obyčejné průměrování na okolí 3×3 pixely. Pomocí klávesy E je možné filtraci zapnout či vypnout.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is6_1.html

Demonstrační příklad 6.2

V demonstračním příkladu 6.2 je na vykreslovaný obrázek aplikován Gaussův filtr pro rozmazání. Oproti předchozímu příkladu dochází k menšímu rozmazání hran, neboť je zvýrazněna váha středového pixelu a jeho čtyřokolí v konvolučním já­dru.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is6_2.html

Demonstrační příklad 6.3

V demonstračním příkladu 6.3 je na rastrový obrázek aplikován Sobelův filtr v „severním“ směru. Pomocí klávesy E je opět možné filtraci zapnout či vypnout.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is6_3.html

Demonstrační příklad 7.1

V demonstračním příkladu 7.1 se zobrazuje rastrový obrázek pomocí funkce glDrawPixels(). Při přenosu obrázku se na něj aplikuje separabilní konvoluční filtr, který provádí filtraci v horizontálním směru v okolí pěti pixelů – ve vertikálním směru k rozmazání obrázku nedochází. Pomocí klávesy E je možné aplikaci filtru povolit či zakázat.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is7_1.html

Demonstrační příklad 7.2

Demonstrační příklad 7.2 se v mnohém podobá příkladu předchozímu s tím rozdílem, že se rastrový obraz filtruje pouze ve směru vertikálním.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is7_2.html

Demonstrační příklad 7.3

V demonstračním příkladu 7.3 se provádí detekce horizontálních hran na čtveřici sousedních pixelů v horizontálním smě­ru.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is7_3.html

Demonstrační příklad 7.4

V demonstračním příkladu 7.4 se provádí detekce hran vertikálních, opět na čtveřici sousedních pixelů.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is7_4.html

Demonstrační příklad 8.1

Při spuštění demonstračního příkladu 8.1 se načte rastrový obrázek ze souboru lena.tga. Tento obrázek se posléze zobrazí pomocí funkce glDrawPixels(). Po vykreslení rastrového obrázku se z paměti grafického akcelerátoru přečte a následně vykreslí i jeho histogram, který je vytvořen pro každou barvovou složku zvlášť.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is8_1.html

Demonstrační příklad 8.2

Demonstrační příklad 8.2 se v mnohém podobá příkladu předchozímu. Jediný rozdíl spočívá v tom, že se histogram nezobrazuje pro každou barvovou složku zvlášť, ale pouze pro světlosti vykreslovaných pixelů. Tento typ histogramu je použitelný například pro kalibraci kontrastu a jasu.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is8_2.html

Demonstrační příklad 9.1

Po přeložení a spuštění demonstračního příkladu 9.1 se načte z externího souboru lena.tga rastrový obrázek, který se posléze zobrazí pomocí funkce glDrawPixels() do okna aplikace. Po vykreslení rastrového obrázku se přečte a vykreslí i histogram (bližší popis je uveden v osmém pokračování) a vypíšou se minimální a maximální hodnoty ukládané do minmax tabulky. Hodnoty jsou vypsány pro každou barvovou složku zvlášť. Histogram je zobrazen pouze pro světlosti pixelů, podobně jako v demonstračním příkladu (8.1).

Odkaz: /clanek/photos/o­pengl_is/open­gl_is9_1.html

Demonstrační příklad 9.2

Při přeložení a následném spuštění demonstračního příkladu 9.2 se opět načte z externího souboru lena.tga rastrový obrázek, který se posléze zobrazí pomocí funkce glDrawPixels() do okna aplikace. Složky v barvové paletě obrázku jsou nastaveny tak, že provádí gamma korekci s exponentem větším než 1. Aplikací barvové palety na vykreslovaný obrázek se změní i hodnoty ukládané do minmax tabulky. Pomocí klávesy P se povoluje a zakazuje použití barvové palety, což se projeví i na zobrazovaných hodnotách z minmax tabulky.

Odkaz: /clanek/photos/o­pengl_is/open­gl_is9_2.html

Odkazy na příkazy OpenGL Imaging Subsetu rozdělené podle jednotlivých dílů

I

  II   III   IV  

V   VI   VII   VIII   IX   X  

I. Význam Imaging Subsetu, vztah Imaging Subsetu a OpenGL

Odkaz: /clanek/2068

Nové funkce:

glGetError()
glGetString()

II. Změna hodnot během přenosu pixelů a fragmentů

Odkaz: /clanek/2079

Nové funkce:

glPixelTransferi()
glPixelTransferf()
glPixelMap()

Funkce pouze zmíněné:

glGetError()

III. Pixel Look-Up tables

Odkaz: /clanek/2092

Nové funkce:

glPixelMapfv()
glPixelMapuiv()
glPixelMapusv()

Funkce pouze zmíněné:

glGetBooleanv()
glGetIntegerv()
glPixelTransferi()
glDrawPixels()
 

IV. Práce s barvovými paletami 1

Odkaz: /clanek/2106

Nové funkce:

glColorTable()
glGetColorTable()

Funkce pouze zmíněné:

glDrawPixels()
glReadPixels()
glEnable()
glDisable()
 

V. Práce s barvovými paletami 2

Odkaz: /clanek/2120

Nové funkce:

glColorTablePa­rameteriv()
glColorTablePa­rameterfv()
glGetColorTable­Parameterfv()
glGetColorTable­Parameteriv()
glCopyColorTable()
glColorSubTable()
glCopyColorSub­Table()

Funkce pouze zmíněné:

glColorTable()
glDrawPixels()
glBitmap()
 

VI. Konvoluční filtry 1

Odkaz: /clanek/2134

Nové funkce:

glConvolution­Parameteriv()
glConvolution­Parameterfv()
glConvolution­Filter2D()

Funkce pouze zmíněné:

glDrawPixels()
glConvolution­Filter1D()
 

VII. Konvoluční filtry 2

Odkaz: /clanek/2145

Nové funkce:

glConvolution­Filter1D()
glSeparableFil­ter2D()
glGetSeparable­Filter()
glGetConvoluti­onFilter()
glGetConvoluti­onParameterfv()
glGetConvoluti­onParameteriv()
glCopyConvolu­tionFilter1D()
glCopyConvolu­tionFilter2D()

Funkce pouze zmíněné:

glEnable()
glDisable()
glConvolution­Parameterf()
glGetConvoluti­onParameterf()
glConvolution­Filter2D()
glCopyPixels()
 

VIII. Histogram

Odkaz: /clanek/2158

Nové funkce:

glHistogram()
glGetHistogram()
glResetHistogram()
glGetHistogram­Parameterfv()
glGetHistogram­Parameteriv()

Funkce pouze zmíněné:

glEnable()
glDisable()
glReadPixels()
glDrawPixels()
 

IX. Minmax tabulky

Odkaz: /clanek/2169

Nové funkce:

glMinmax()
glGetMinmax()
glResetMinmax()
glGetMinmaxPa­rameteriv()
glGetMinmaxPa­rameterfv()

Funkce pouze zmíněné:

glTexImage2D()
glDrawPixels()
glReadPixels()
glGetHistogram()
glEnable()
glDisable()
 

X. Obsah jednotlivých dílů, seznam příkladů a funkcí

Odkaz: /clanek/2183

Nové funkce:


Funkce pouze zmíněné:

UX DAy - tip 2


Odkazy na příkazy OpenGL Imaging Subsetu setříděné podle abecedy

glBitmap()5
glColorSubTable()5
glColorTable()45
glColorTablePa­rameterfv()5
glColorTablePa­rameteriv()5
glConvolution­Filter1D()67
glConvolution­Filter2D()67
glConvolution­Parameterfv()67
glConvolution­Parameteriv()6
glCopyColorSub­Table()5
glCopyColorTa­ble()5
glCopyConvolu­tionFilter1D()7
glCopyConvolu­tionFilter2D()7
glCopyPixels()7
glDisable()4789
glDrawPixels()45689
glEnable()4789
glGetColorTable()4
glGetColorTable­Parameterfv()5
glGetColorTable­Parameteriv()5
glGetConvoluti­onFilter()7
glGetConvoluti­onParameterfv()7
glGetConvoluti­onParameteriv()7
glGetError()12
glGetHistogram()89
glGetHistogram­Parameterfv()8
glGetHistogram­Parameteriv()8
glGetMinmax()9
glGetMinmaxPa­rameterfv()9
glGetMinmaxPa­rameteriv()9
glGetSeparable­Filter()7
glGetString()1
glHistogram()8
glMinmax()9
glPixelMap()2
glPixelMapfv()3
glPixelMapuiv()3
glPixelMapusv()3
glPixelTransfer­f()2
glPixelTransfe­ri()2
glReadPixels()489
glResetHistogram()8
glResetMinmax()9
glSeparableFil­ter2D()7
glTexImage2D()9
 

Nastínění témat navazujících článků o multiplatformní počítačové grafice

V dalších seriálech o počítačové grafice budou popsány mimo jiné tyto problematiky: evaluátory v OpenGL, knihovna GLU, jež tvoří nadstavbu nad OpenGL, multitexturování a vývoj grafických karet a akcelerátorů v minulosti a v současnosti s výhledem do budoucnosti.

Pokud máte zájem o pojednání o dalších tématech, vyjádřete se, prosím, v diskusním fóru pod tímto článkem.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.