Obsah
Poznámky k organizaci této stránkyObsah 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ů
II. 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.1Demonstrač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/opengl_is/opengl_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/opengl_is/opengl_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 glPixelTransferi(). Kontrast lze měnit pomocí myši na zobrazených posuvnících.
Odkaz: /clanek/photos/opengl_is/opengl_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 glPixelTransferi(). Kontrast lze měnit pomocí myši na zobrazených posuvnících.
Odkaz: /clanek/photos/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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 prepareColorTable().
Odkaz: /clanek/photos/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_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/opengl_is/opengl_is9_2.html
Odkazy na příkazy OpenGL Imaging Subsetu rozdělené podle jednotlivých dílů
II. 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:
glColorTableParameteriv()glColorTableParameterfv()
glGetColorTableParameterfv()
glGetColorTableParameteriv()
glCopyColorTable()
glColorSubTable()
glCopyColorSubTable()
Funkce pouze zmíněné:
glColorTable()glDrawPixels()
glBitmap()
VI. Konvoluční filtry 1
Odkaz: /clanek/2134
Nové funkce:
glConvolutionParameteriv()glConvolutionParameterfv()
glConvolutionFilter2D()
Funkce pouze zmíněné:
glDrawPixels()glConvolutionFilter1D()
VII. Konvoluční filtry 2
Odkaz: /clanek/2145
Nové funkce:
glConvolutionFilter1D()glSeparableFilter2D()
glGetSeparableFilter()
glGetConvolutionFilter()
glGetConvolutionParameterfv()
glGetConvolutionParameteriv()
glCopyConvolutionFilter1D()
glCopyConvolutionFilter2D()
Funkce pouze zmíněné:
glEnable()glDisable()
glConvolutionParameterf()
glGetConvolutionParameterf()
glConvolutionFilter2D()
glCopyPixels()
VIII. Histogram
Odkaz: /clanek/2158
Nové funkce:
glHistogram()glGetHistogram()
glResetHistogram()
glGetHistogramParameterfv()
glGetHistogramParameteriv()
Funkce pouze zmíněné:
glEnable()glDisable()
glReadPixels()
glDrawPixels()
IX. Minmax tabulky
Odkaz: /clanek/2169
Nové funkce:
glMinmax()glGetMinmax()
glResetMinmax()
glGetMinmaxParameteriv()
glGetMinmaxParameterfv()
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é:
Odkazy na příkazy OpenGL Imaging Subsetu setříděné podle abecedy
glBitmap()5glColorSubTable()5
glColorTable()45
glColorTableParameterfv()5
glColorTableParameteriv()5
glConvolutionFilter1D()67
glConvolutionFilter2D()67
glConvolutionParameterfv()67
glConvolutionParameteriv()6
glCopyColorSubTable()5
glCopyColorTable()5
glCopyConvolutionFilter1D()7
glCopyConvolutionFilter2D()7
glCopyPixels()7
glDisable()4789
glDrawPixels()45689
glEnable()4789
glGetColorTable()4
glGetColorTableParameterfv()5
glGetColorTableParameteriv()5
glGetConvolutionFilter()7
glGetConvolutionParameterfv()7
glGetConvolutionParameteriv()7
glGetError()12
glGetHistogram()89
glGetHistogramParameterfv()8
glGetHistogramParameteriv()8
glGetMinmax()9
glGetMinmaxParameterfv()9
glGetMinmaxParameteriv()9
glGetSeparableFilter()7
glGetString()1
glHistogram()8
glMinmax()9
glPixelMap()2
glPixelMapfv()3
glPixelMapuiv()3
glPixelMapusv()3
glPixelTransferf()2
glPixelTransferi()2
glReadPixels()489
glResetHistogram()8
glResetMinmax()9
glSeparableFilter2D()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.