Sislt 12 1 osa Yleist Open GL n

  • Slides: 80
Download presentation

Sisältö (1/2) 1. osa Yleistä Open. GL: n arkkitehtuuri Perusteet kappaleiden piirtämisestä Muunnokset ja

Sisältö (1/2) 1. osa Yleistä Open. GL: n arkkitehtuuri Perusteet kappaleiden piirtämisestä Muunnokset ja matriisit Näkyvyyden määrittäminen Kappaleiden tehokas piirtäminen: Listat ja taulukot

Sisältö 2. osa Valaistus Tekstuurit Käyrät ja parametriset pinnat Blending Puskurit ja fragmentit Sumu

Sisältö 2. osa Valaistus Tekstuurit Käyrät ja parametriset pinnat Blending Puskurit ja fragmentit Sumu Virheiden käsittely & laajennukset (2/2)

Yleistä Open. GL: stä (1/2) Open. GL on standardi, (lähes) alustariippumaton ohjelmointirajapinta grafiikkalaitteistolle Standardin

Yleistä Open. GL: stä (1/2) Open. GL on standardi, (lähes) alustariippumaton ohjelmointirajapinta grafiikkalaitteistolle Standardin määrittelee Architectural Review Board (ARB) Järjestelmäriippuvaisia osia pääasiassa ikkunajärjestelmään liittyviä toiminnot sekä Open. GL: n käyttöönotto(GLX, WGL) Nykyiset versiot 1. 1 -1. 4 Versio 2. 0 tekeillä

Yleistä Open. GL: stä (2/2) Open. GL koostuu kahdesta osasta Itse rajapinta GLU, joka

Yleistä Open. GL: stä (2/2) Open. GL koostuu kahdesta osasta Itse rajapinta GLU, joka on rajapinnan päälle rakennettu apukirjasto. Sisältää lukuisia usein tarvittuja apufunktioita. Lisäksi GLUT, joka tarjoaa rajapinnan ikkunajärjestelmään. Muissa kirjastoissa myös tukea. mm. Qt, gtk

Open. GL: n arkkitehtuuri (1/3) Open. GL on tilakone Piirtoa ohjataan lukuisten tilojen avulla

Open. GL: n arkkitehtuuri (1/3) Open. GL on tilakone Piirtoa ohjataan lukuisten tilojen avulla Kun tila on asetettu se on voimassa kunnes se muutetaan Tilat asetetaan toisistaan riippumattomasti Tilojen keskinäinen vuorovaikutus määrittää lopputuloksen

Open. GL: n arkkitehtuuri (2/3) Open. GL on arkkitehtuuriltaan client-server Hajautettu ratkaisu mahdollinen Palvelin

Open. GL: n arkkitehtuuri (2/3) Open. GL on arkkitehtuuriltaan client-server Hajautettu ratkaisu mahdollinen Palvelin pitää kirjaa kunkin asiakkaan tilatiedoista (ns. GL context) Open. GL voidaan myös nähdä liukuhihnana Toisesta päästä syötetään dataa joka useiden vaiheiden jälkeen päätyy näytön pisteiksi

Open. GL: n arkkitehtuuri (3/3) Open. GL: n ohjaus tapahtuu komennoilla Komennot käsitellään saapumisjärjestyksessä

Open. GL: n arkkitehtuuri (3/3) Open. GL: n ohjaus tapahtuu komennoilla Komennot käsitellään saapumisjärjestyksessä Suoritus ei välttämättä välitöntä Ohjauskomennot annetaan APIn funktiokutsuilla Komennoilla vaikutetaan prosessiin, jolla lopputulos saadaan aikaan, eikä niinkään sitä miltä lopputulos näyttää Ei taetta siitä että lopputulos on täsmälleen sama kahdella eri alustalla

Open. GL rajapintana Open. GL on matalan tason rajapinta. Sen avulla piirretään yksinkertaisia kaksi-

Open. GL rajapintana Open. GL on matalan tason rajapinta. Sen avulla piirretään yksinkertaisia kaksi- ja kolmeulotteisia kappaleita laitteiston näyttöpuskuriin. Piste, jana, polygoni Lisäksi parametrisoidut käyrät ja pinnat. Nämä muunnetaan janoiksi ja polygoneiksi ennen piirtoa Kappale koostuu yhdestä (piste) tai useammasta verteksistä.

Vilkaisu "pellin alle" Alla karkea kaaviokuva Open. GL: n renderöintiprosessista

Vilkaisu "pellin alle" Alla karkea kaaviokuva Open. GL: n renderöintiprosessista

Open. GL API (1/3) Funktioiden nimeämisestä Rajapinnassa on noin 120 erilaista toimintoa Useimpia voidaan

Open. GL API (1/3) Funktioiden nimeämisestä Rajapinnassa on noin 120 erilaista toimintoa Useimpia voidaan käyttää usean eri funktion kautta käyttäen vaihtelevaa määrää erityyppisiä parametreja. Funktiot nimetty säännönmukaisesti käytetyn parametrityypin ja parametrien lukumäärän mukaan. Funktionimen viimeiset kirjaimet ja numerot kertovat tyypin ja parametrien lukumäärän

Open. GL API (2/3) Alla käytetyt kirjaimet ja niitä vastaavat tyypit Näiden lisäksi määritelty

Open. GL API (2/3) Alla käytetyt kirjaimet ja niitä vastaavat tyypit Näiden lisäksi määritelty GLvoid

Open. GL API (3/3) Esimerkki: gl. Vertex*() gl. Vertex 2 f(2. 0 f, 3.

Open. GL API (3/3) Esimerkki: gl. Vertex*() gl. Vertex 2 f(2. 0 f, 3. 0 f) gl. Vertex 3 i(2, 3, 0) gl. Vertex 4 d(4. 0, 1. 0, -0. 5, 2. 0) float v[] = {1. 0 f, 2. 0 f, 3. 0 f}; gl. Vertex 3 fv(v)

GLUT & Open. GL perusteet (1/8) GLUT on järjestelmäriippumaton kirjasto joka huolehtii ikkunajärjestelmästä GLUT:

GLUT & Open. GL perusteet (1/8) GLUT on järjestelmäriippumaton kirjasto joka huolehtii ikkunajärjestelmästä GLUT: n tarjoama toiminnallisuus Ikkunoiden hallinta. Yksi sovellus voi käyttää useita ikkunoita Callback-perustainen tapahtumankäsittely Fonttien käsittely Valikkojärjestelmä

GLUT & Open. GL perusteet Yksinkertainen esimerkki GLUT: n käyttöönotto glut. Init() glut. Init.

GLUT & Open. GL perusteet Yksinkertainen esimerkki GLUT: n käyttöönotto glut. Init() glut. Init. Display. Mode() glut. Init. Window. Position() & glut. Init. Window. Size() glut. Create. Window() glut. Main. Loop() Callbackien rekisteröinti (2/8)

GLUT & Open. GL perusteet (3/8) Puskureiden tyhjentäminen gl. Clear() Tyypillisimmät parametrit GL_COLOR_BUFFER_BIT –

GLUT & Open. GL perusteet (3/8) Puskureiden tyhjentäminen gl. Clear() Tyypillisimmät parametrit GL_COLOR_BUFFER_BIT – näyttöpuskuri GL_DEPTH_BUFFER_BIT – z-puskuri gl. Clear. Color() valitsee värin, jolla näyttö tyhjennetään gl. Clear. Depth() asettaa z-arvon jolla z-puskuri tyhjennetään

GLUT & Open. GL perusteet (4/8) Kuinka taata se että komennot on suoritettu gl.

GLUT & Open. GL perusteet (4/8) Kuinka taata se että komennot on suoritettu gl. Flush() pakottaa aloittamaan komentojen suorituksen gl. Finish() kuten gl. Flush() mutta odottaa kunnes komennot on suoritettu

GLUT & Open. GL perusteet (5/8) Kappaleiden piirtäminen Piste, jana, polygoni Polygonista kuusi erikoistapausta

GLUT & Open. GL perusteet (5/8) Kappaleiden piirtäminen Piste, jana, polygoni Polygonista kuusi erikoistapausta Kolmio, nelikulmio, kolmionauha, kolmioviuhka, nelikulmionauha, nelikulmioviuhka Vain yksinkertaiset polygonit sallittuja

GLUT & Open. GL perusteet (6/8) Kappaleet määritetään gl. Begin() ja gl. End() kutsujen

GLUT & Open. GL perusteet (6/8) Kappaleet määritetään gl. Begin() ja gl. End() kutsujen välissä. gl. Begin(): lle annetaan parametriksi halutun kappaleen tyyppi Samanaikaisesti voidaan määrittää useita samantyyppisiä kappaleita gl. Begin() ja gl. End() välissä vain kappaleiden määrittämiseen liittyvät funktiot sallittuja

GLUT & Open. GL perusteet (7/8) Kappaleen verteksit määritetään gl. Vertex*() kutsuilla Verteksi "perii"

GLUT & Open. GL perusteet (7/8) Kappaleen verteksit määritetään gl. Vertex*() kutsuilla Verteksi "perii" kutsun aikana voimassa olleen värin, normaalivektorin, tekstuurikoordinaatit sekä reunalipun Näitä voidaan vaihtaa Väri: gl. Color()* tai gl. Index*() Normaalivektori gl. Normal*() Tekstuurikoordinaatit: gl. Tex. Coord*() Reunalippu: gl. Edge. Flag()

GLUT & Open. GL perusteet (8/8)

GLUT & Open. GL perusteet (8/8)

Tilojen hallintaa Erilaisia asetuksia kolmenlaisia Aina käytössä olevat "on/off"-tyyppiset asetukset "on/off" + parametrit Tiloja

Tilojen hallintaa Erilaisia asetuksia kolmenlaisia Aina käytössä olevat "on/off"-tyyppiset asetukset "on/off" + parametrit Tiloja säädellään gl. Enable() / gl. Disable()parilla Parametrit asetetaan omilla komennoilla gl. Is. Enabled() & gl. Get*()

Matriisit ja muunnokset (1/8)

Matriisit ja muunnokset (1/8)

Matriisit ja muunnokset (2/8) Matriisin valinta gl. Matrix. Mode() Modelview-matriisin muunnokset Skaalaus: gl. Scale*()

Matriisit ja muunnokset (2/8) Matriisin valinta gl. Matrix. Mode() Modelview-matriisin muunnokset Skaalaus: gl. Scale*() Kierto: gl. Rotate*() Siirto: gl. Translate*() "kamera": glu. Look. At() Muunnoksilla muutetaan koordinaatistoa, ei kappaletta

Matriisit ja muunnokset Projektiomatriisi Perspektiiviprojektio gl. Frustum() glu. Perspective() Ortografinen projektio gl. Ortho() glu.

Matriisit ja muunnokset Projektiomatriisi Perspektiiviprojektio gl. Frustum() glu. Perspective() Ortografinen projektio gl. Ortho() glu. Ortho 2 D() (3/8)

Matriisit ja muunnokset Normaali perspektiiviprojektio: (4/8)

Matriisit ja muunnokset Normaali perspektiiviprojektio: (4/8)

Matriisit ja muunnokset Ortografinen projektio (5/8)

Matriisit ja muunnokset Ortografinen projektio (5/8)

Matriisit ja muunnokset Muita matriisin käsittelyfunktioita: gl. Load. Identity() - identtinen matriisi gl. Mult.

Matriisit ja muunnokset Muita matriisin käsittelyfunktioita: gl. Load. Identity() - identtinen matriisi gl. Mult. Matrix() - kerrotaan matriisilla gl. Load. Matrix() - asetetaan matriisi (6/8)

Matriisit ja muunnokset (7/8) Matriisipinot Kullekin matriisityypille on oma pinonsa Hierarkkisille malleille gl. Push.

Matriisit ja muunnokset (7/8) Matriisipinot Kullekin matriisityypille on oma pinonsa Hierarkkisille malleille gl. Push. Matrix() - talletetaan nykyinen matriisi pinoon gl. Pop. Matrix() - korvataan nykyinen matriisi pinon huipulla Pinojen koko: Modelview: vähintään 32 Projektio: vähintään 2

Matriisit ja muunnokset (8/8) Koordinaatit skaalataan ikkunan mittoihin sopiviksi Käytössä olevan alueen kokoa ja

Matriisit ja muunnokset (8/8) Koordinaatit skaalataan ikkunan mittoihin sopiviksi Käytössä olevan alueen kokoa ja paikkaa voidaan säätää gl. Viewport() Z-koordinaatit normaalisti välillä 0 -1 Voidaan myös säätää gl. Depth. Range()

Näkyvyyden määrittäminen (1/4) Taakseosoittavien monikulmoiden poistaminen Poistetaan polygonit, jotka ovat "takaperin" tavallisesti takaperin on

Näkyvyyden määrittäminen (1/4) Taakseosoittavien monikulmoiden poistaminen Poistetaan polygonit, jotka ovat "takaperin" tavallisesti takaperin on polygoni jonka verteksit kiertävät vastapäivään gl. Enable(GL_CULL_FACE) Poistetaanko etu- vai takaperin olevat polygonit: gl. Cull. Face() Kumminko päin on takaperin: gl. Front. Face()

Näkyvyyden määrittäminen (2/4) Perspektiivikartioon perustuva leikkaaminen Kaikki kappaleet tai kappaleen osat jotka ovat näkyvyyskartion

Näkyvyyden määrittäminen (2/4) Perspektiivikartioon perustuva leikkaaminen Kaikki kappaleet tai kappaleen osat jotka ovat näkyvyyskartion ulkopuolella leikataan pois On mahdollista määrittää ainakin 6 ylimääräistä tasoa joilla kappaleita leikataan ennen projektiota gl. Enable(GL_CLIP_PLANEi) gl. Clip. Plane()

Näkyvyyden määrittäminen (3/4) Z-puskuri varastoi yhden z-arvon kutakin näyttöpuskurin pikseliä kohti tavallisesti z-arvo kuvaa

Näkyvyyden määrittäminen (3/4) Z-puskuri varastoi yhden z-arvon kutakin näyttöpuskurin pikseliä kohti tavallisesti z-arvo kuvaa etäisyyttä "kamerasta", eli suurempi -> kauempana piirrettäessä vain sellainen fragmentti piirretään jonka z on pienempi kuin z-puskurissa ko. pikselin kohdalla oleva arvo aina kun pikseli piirretään, korvataan z-arvo

Näkyvyyden määrittäminen (4/4) gl. Enable(GL_DEPTH_TEST) puskurin toimintatavan valinta: gl. Depth. Func() gl. Clear. Depth()

Näkyvyyden määrittäminen (4/4) gl. Enable(GL_DEPTH_TEST) puskurin toimintatavan valinta: gl. Depth. Func() gl. Clear. Depth() gl. Clear(GL_DEPTH_BUFFER_BIT) Kähden lähekkäisen kappaleen keskinäinen zjärjestys saattaa vaihdella ikävästi gl. Polygon. Offset()

Verteksitaulukot ja listat (1/5) Verteksitaulukko Verteksidata välitetään yhdessä tai useammassa taulukossa Kappaleet voidaan määrittää

Verteksitaulukot ja listat (1/5) Verteksitaulukko Verteksidata välitetään yhdessä tai useammassa taulukossa Kappaleet voidaan määrittää joko suoraan taulukossa tai erillisen indeksitaulukon avulla Mahdollistaa verteksidatan välittämisen taulukkomuodossa Yksinkertaistaa esimerkiksi tiedostosta luetun datan käsittelyä Indeksointi vähentää muunnoksia

Verteksitaulukot ja listat (2/5) gl. Enable. Client. State() Taulukot välitetään gl*Pointer() komennoilla Color, Index,

Verteksitaulukot ja listat (2/5) gl. Enable. Client. State() Taulukot välitetään gl*Pointer() komennoilla Color, Index, Edge. Flag, Normal, Tex. Coord, Vertex eli kaikki vertekseihin vaikuttava data voidaan välittää taulukoina taulukot myös mahdollista yhdistää: gl. Interleaved. Arrays() gl. Draw. Arrays() - piirretään kappaleita suoraan aktiivisista taulukoista gl. Draw. Elements() - piirretään kappaleita aktiivisista taulukoista indeksoituna

Verteksitaulukot ja listat (3/5) Listat (Display lists) lista johon koottu Open. GL-komentoja varastoi sekä

Verteksitaulukot ja listat (3/5) Listat (Display lists) lista johon koottu Open. GL-komentoja varastoi sekä geometriaa että tilamuutoksia yksinkertaistaa geometrian käsittelyä voi tehostaa suoritusta säilytetään palvelimella tehokas tapa säilyttää kappaleita jotka piirretään useita kertoja 3 D-kiihdytin voi varastoida listan omaan muistiinsa

Verteksitaulukot ja listat (4/5) Listan luominen Pyydetään listalle tunniste gl. Gen. Lists(): llä Annetaan

Verteksitaulukot ja listat (4/5) Listan luominen Pyydetään listalle tunniste gl. Gen. Lists(): llä Annetaan halutut komennot gl. New. List()/gl. End. List() välissä Kaikkia komentoja ei voi tallettaa listaan gl. Get*() Verteksitaulukot Taulukkomuodossa annetusta datasta vain sen hetkiset arvot tallettuvat Listoja voidaan koostaa hierarkkisesti Myös GLU komentoja voidaan tallettaa listaan

Verteksitaulukot ja listat Listan käyttö gl. Call. List() listaa kutsuttaessa komennot suoritetaan talletusjärjestyksessä ei

Verteksitaulukot ja listat Listan käyttö gl. Call. List() listaa kutsuttaessa komennot suoritetaan talletusjärjestyksessä ei tarvita gl. Begin()/gl. End() Listassa olevat tilanmuunnokset jäävät voimaan! gl. Call. Lists() suorittaa taulukossa annetut listat (5/5)

Valaistus (1/7) Yleistä Lokaali valaistusmalli Valaistus lasketaan verteksiperustaisesti Interpoloidaan muille polygonin pisteille Ei varjoja

Valaistus (1/7) Yleistä Lokaali valaistusmalli Valaistus lasketaan verteksiperustaisesti Interpoloidaan muille polygonin pisteille Ei varjoja Malli muodostuu Valonlähteistä Materiaaleista Globaaleista attribuuteista

Valaistus (2/7) Valonlähteet Kolmea tyyppiä: Suunnattu (directional), paikallinen (positional) ja spotti (spotlight) Attribuutit: sijainti/suunta

Valaistus (2/7) Valonlähteet Kolmea tyyppiä: Suunnattu (directional), paikallinen (positional) ja spotti (spotlight) Attribuutit: sijainti/suunta Väritys: yleis- (ambient), diffuusi- (diffuse) ja peilimäinen (specular) -väri ja intensiteetti Vaimennus (attenuation) Spotin leveys (kulma) ja keilan suunta Spot exponent

Valaistus (3/7) Materiaalit Materiaali määrittää miten kappale reagoi valoon Attribuutit Heijastus: yleis- (ambient), diffuusi

Valaistus (3/7) Materiaalit Materiaali määrittää miten kappale reagoi valoon Attribuutit Heijastus: yleis- (ambient), diffuusi (diffuse), ja peilimäinen (specular) -väri ja -intensiteetti Kiiltävyys (shininess) Emissio (emission)

Valaistus (4/7) Globaalit attribuutit Globaali yleisvalo (global ambient) Tulkitaanko "kameran" olevan paikallinen vai äärettömän

Valaistus (4/7) Globaalit attribuutit Globaali yleisvalo (global ambient) Tulkitaanko "kameran" olevan paikallinen vai äärettömän kaukana (local viewer) Valaistaanko takaperoiset polygonit gl. Light. Model()

Valaistus (5/7) Valojen käyttö Open. GL tukee ainakin 8 samanaikaista valonlähdettä gl. Shade. Model()

Valaistus (5/7) Valojen käyttö Open. GL tukee ainakin 8 samanaikaista valonlähdettä gl. Shade. Model() gl. Enable(GL_LIGHTING) Valoja voidaan käyttää toisistaan riippumatta gl. Enable(GL_LIGHTi) Kappaleiden vertekseille määritettävä normaalivektorit

Valaistus (6/7) Valojen parametrien asettaminen: gl. Light*() Suunnattu valonlähde saadaan asettamalla valon sijainnin neljäs

Valaistus (6/7) Valojen parametrien asettaminen: gl. Light*() Suunnattu valonlähde saadaan asettamalla valon sijainnin neljäs koordinaatti = 0 Modelview-matriisi vaikuttaa paikallisiin valoihin. Muunnos suoritetaan samalla kun valonlähteen sijainti asetetaan Paikallisesta valosta saadaan spotti rajoittamalla keilan leveyttä (annetaan keilen leveyden puolikas) Vaimennuskertoimet eivät vaikuta suunnattuihin valonlähteisiin

Valaistus (7/7) Materiaalit gl. Material() voidaan asettaa erikseen polygonin etu- ja takapuolelle myös alpha-arvot

Valaistus (7/7) Materiaalit gl. Material() voidaan asettaa erikseen polygonin etu- ja takapuolelle myös alpha-arvot voidaan asettaa, ainoastaan diffuusi-termin alphalla vaikutusta emissiotermillä kappale voidaan saada näyttämään valonlähteeltä ("hohtamaan") gl. Color. Material()

Tekstuurit (1/16) Tekstuureilla vähennetään "muovikappale avaruudessa" – efektiä Tekstuuri on joko yksi- tai kaksiulotteinen

Tekstuurit (1/16) Tekstuureilla vähennetään "muovikappale avaruudessa" – efektiä Tekstuuri on joko yksi- tai kaksiulotteinen datataulukko yksittäinen elementti, "tekseli" (texel) koostuu 1 -4 arvosta 6 erilaista esitysmuotoa RGB(A), alpha, luminanssi (+ alpha), intensiteetti

Tekstuurit (2/16) Tekstuurien luominen Luodaan uusi tekstuuriobjekti Luodaan tai luetaan tekstuuridata muistiin Generoidaan tunniste:

Tekstuurit (2/16) Tekstuurien luominen Luodaan uusi tekstuuriobjekti Luodaan tai luetaan tekstuuridata muistiin Generoidaan tunniste: gl. Gen. Textures() Valmistellaan tekstuuriobjekti Aktivoidaan luotu tekstuuriobjekti: gl. Bind. Texture() Siirretään tekstuuridata Open. GL: n käyttöön: gl. Tex. Image 2 D() Asetetaan parametrit

Tekstuurit (3/16) Mipmaps Etukäteen luotuja eri kokoisia "alitekstuureja" Seuraava pienempi tekstuuri aina 1/4 edellisestä

Tekstuurit (3/16) Mipmaps Etukäteen luotuja eri kokoisia "alitekstuureja" Seuraava pienempi tekstuuri aina 1/4 edellisestä Vähentää tekstuurien "välkettä" kappaleen koon pienentyessä -> parempi kuvanlaatu Muistitarve +33% Luontiin glu. Build 2 DMipmaps()

Tekstuurit (4/16)

Tekstuurit (4/16)

Tekstuurit (5/16) Tekstuurin käyttö gl. Enable(GL_TEXTURE_2 D) Aktivoidaan haluttu tekstuuri gl. Bind. Texture() Asetetaan

Tekstuurit (5/16) Tekstuurin käyttö gl. Enable(GL_TEXTURE_2 D) Aktivoidaan haluttu tekstuuri gl. Bind. Texture() Asetetaan vertekseille tekstuurikoordinaatit gl. Tex. Coord 2 D() Tekstuurikoordinaatit välillä 0 -1 Koordinaatit muunnetaan tekstuurimatriisilla

Tekstuurit (6/16) Mitä tehdä jos tekstuurikoordinaatti on välin 0 -1 ulkopuolella? Voidaan toistaa uudelleen

Tekstuurit (6/16) Mitä tehdä jos tekstuurikoordinaatti on välin 0 -1 ulkopuolella? Voidaan toistaa uudelleen 1. 1 -> 0. 1, jne Voidaan leikata 1. 4 -> 1. 0, -0. 4 -> 0, jne Voidaan valita vapaasti sekä vaaka että pystysuuntaan gl. Tex. Parameter() GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T GL_CLAMP tai GL_REPEAT

Tekstuurit (7/16) Tekstuurikoordinaattien muunnokset Tekstuurikoordinaatit neliulotteisia aivan kuin normaalit koordinaatitkin (s, t, r, q)

Tekstuurit (7/16) Tekstuurikoordinaattien muunnokset Tekstuurikoordinaatit neliulotteisia aivan kuin normaalit koordinaatitkin (s, t, r, q) Tavallisesti r jätetään huomioimatta Tavallisesti q = 1 Tekstuurikoordinaateilla samanlainen 4 x 4 matriisi kuin tavallisillekin koordinaateille Kaikki muunnokset mahdollisia, jopa perspektiivi!

Tekstuurit (8/16) Ongelma: yksi tekseli vastaa vain harvoin yhtä näytön pikseliä Tekstuuria on suodatettava,

Tekstuurit (8/16) Ongelma: yksi tekseli vastaa vain harvoin yhtä näytön pikseliä Tekstuuria on suodatettava, eli joko "venytettävä" tai "kutistettava" tarpeen mukaan

Tekstuurit (9/16) Suodatustapa voidaan valita Valinta erikseen suurennukselle ja pienennykselle Voidaan valita miten mipmapeja

Tekstuurit (9/16) Suodatustapa voidaan valita Valinta erikseen suurennukselle ja pienennykselle Voidaan valita miten mipmapeja käytetään Kuvan laatu vs. vaadittu laskentateho Vaihtoehdot joko lähimmän tekselin valinta tai interpolointi

Tekstuurit (10/16) Valinta gl. Tex. Parameter()-kutsulla GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER Suurennussuodatin Aina käytössä suurin mipmap Vaihtoehdot

Tekstuurit (10/16) Valinta gl. Tex. Parameter()-kutsulla GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER Suurennussuodatin Aina käytössä suurin mipmap Vaihtoehdot GL_NEAREST – valitaan lähin tekseli GL_LINEAR – lasketaan arvo neljästä lähimmästä tekselistä

Tekstuurit (11/16) Pienennyssuodatin Voidaan valita käytetäänkö mipmapeja vai ei Voidaan valita käytetäänkö yhtä vai

Tekstuurit (11/16) Pienennyssuodatin Voidaan valita käytetäänkö mipmapeja vai ei Voidaan valita käytetäänkö yhtä vai kahta lähintä mipmapia Vaihtoehdot GL_NEAREST, GL_LINEAR – kuten edellä Käytetään yhtä mipmapia: GL_NEAREST_MIPMAP_(NEAREST | LINEAR) Lasketaan arvo kahden mipmapin arvoista: GL_LINEAR_MIPMAP_(NEAREST | LINEAR)

Tekstuurit (12/16) Tekstuurimoodit (funktiot) Lopputulosta voidaan muokata tekstuurimoodilla Lopputulokseen vaikuttaa kolme tekijää Väri, tekstuuri

Tekstuurit (12/16) Tekstuurimoodit (funktiot) Lopputulosta voidaan muokata tekstuurimoodilla Lopputulokseen vaikuttaa kolme tekijää Väri, tekstuuri sekä GL_TEXTURE_ENV_COLOR lopputuloksen tekstuurimoodi käytetyn tekstuurin esitysmuodon määrittämänä neljä erilaista tekstuurimoodia Decal, Replace, Blend, Modulate

Tekstuurit (13/16) Decal Vain GL_RGB ja RGBA sallittuja esitysmuotoja GL_RGB -> tekstuuri sellaisenaan GL_RGBA

Tekstuurit (13/16) Decal Vain GL_RGB ja RGBA sallittuja esitysmuotoja GL_RGB -> tekstuuri sellaisenaan GL_RGBA -> osittainen läpinäkyvyys Replace Korvaa esitysmuodosta riippuen joko näyttöpuskurin väri-, alpha- tai molemmat arvot

Tekstuurit (14/16) Modulate Kertoo tekstuurin ja näyttöpuskurin väri- ja/tai alpha-arvot keskenään Tekstuuri + valaistus

Tekstuurit (14/16) Modulate Kertoo tekstuurin ja näyttöpuskurin väri- ja/tai alpha-arvot keskenään Tekstuuri + valaistus Blend Sekoittaa GL_TEXTURE_ENV_COLOR värin ja näyttöpuskurin värin tekstuurin arvoilla painotettuna

Tekstuurit (15/16) Kehittyneempiä tekniikoita Multitexturing Useita “päällekäisiä” tekstuureita mm. ns. “lightmapping” Tekstuurien priorisointi &

Tekstuurit (15/16) Kehittyneempiä tekniikoita Multitexturing Useita “päällekäisiä” tekstuureita mm. ns. “lightmapping” Tekstuurien priorisointi & ns. "resident textures" Tärkeää kiihdyttimiä käytettäessä Texture proxy Tekstuurikoordinaattien automaattinen generointi mm. environment mapping

Tekstuurit (16/16)

Tekstuurit (16/16)

Käyrät ja pinnat (1/4)

Käyrät ja pinnat (1/4)

Käyrät ja pinnat (2/4) Open. GL ei sellaisenaan tue em. kappaleita Ne on muutettava

Käyrät ja pinnat (2/4) Open. GL ei sellaisenaan tue em. kappaleita Ne on muutettava janoiksi ja polygoneiksi ennen piirtämistä Open. GL: n evaluaattorit Perustana Bezier-käyrät ja pinnat Soveltuvat: mm. B-Spline, NURBS-pinnat

Käyrät ja pinnat (3/4) Evaluaattoreiden käyttö Määritetään ohjauspisteet halutuille evaluaattoreille: gl. Map*f() Otetaan halutut

Käyrät ja pinnat (3/4) Evaluaattoreiden käyttö Määritetään ohjauspisteet halutuille evaluaattoreille: gl. Map*f() Otetaan halutut evaluaattorit käyttöön: gl. Enable(GL_MAP? _*) Evaluoidaan: gl. Eval. Coord*() Helpompi tapa: Luodaan tasavälinen "portaikko": gl. Map. Grid*() Evaluoidaan halutulla askelvälillä: gl. Eval. Mesh*()

Käyrät ja pinnat (4/4) Evaluointi mahdollista myös tekstuurikoordinaateille, normaalivektoreille, värille Samanaikaisesti mahdollista evaluoida yhtä

Käyrät ja pinnat (4/4) Evaluointi mahdollista myös tekstuurikoordinaateille, normaalivektoreille, värille Samanaikaisesti mahdollista evaluoida yhtä tai useampaa muuttujaa GLU-kirjaston NURBS-toiminnot evaluaattoreita monipuolisempia

Blending (1/4) keino yhdistää kaksi tai useampaa kuvaa tai kuvan osaa "sekoittamalla" niiden pikselit

Blending (1/4) keino yhdistää kaksi tai useampaa kuvaa tai kuvan osaa "sekoittamalla" niiden pikselit yhdistää näyttöpuskurin pikselin ja liukuhihnalta tulevan fragmentin halutulla funktiolla Alphakomponentti funktio: Rs. Cs + Rd. Cd Piirtojärjestyksellä on siis merkitystä

Blending (2/4) gl. Enable(GL_BLEND) Kertoimet määrittävä funktio: gl. Blend. Func() tavallisin tapaus: gl. Blend.

Blending (2/4) gl. Enable(GL_BLEND) Kertoimet määrittävä funktio: gl. Blend. Func() tavallisin tapaus: gl. Blend. Func(GL_ONE, GL_ZERO) + gl. Blend. Func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); "static lightmaps": gl. Blend. Func(GL_ONE, GL_ZERO) + gl. Blend. Func(GL_DST_COLOR, GL_ZERO);

Blending (3/4)

Blending (3/4)

Blending (4/4) Z-puskuri aiheuttaa ongelman Läpinäkyvät pinnat estävät takana olevien pintojen piirtämisen Ratkaisu: Läpinäkyville

Blending (4/4) Z-puskuri aiheuttaa ongelman Läpinäkyvät pinnat estävät takana olevien pintojen piirtämisen Ratkaisu: Läpinäkyville pinnoille sallitaan vain luku zpuskurista gl. Depth. Mask()

Puskurit (1/5) Kuvan muodostava tieto talletetaan puskureihin Näyttöpuskurit (color buffer) Vähintään yksi puskuri Stereokuvatuki

Puskurit (1/5) Kuvan muodostava tieto talletetaan puskureihin Näyttöpuskurit (color buffer) Vähintään yksi puskuri Stereokuvatuki mahdollinen (kaksi puskuria) Kaksoispuskurointituki mahdollinen Mahdollisesti lisäpuskureita (auxiliary buffer) z-puskuri Stencil buffer Accumulation buffer

Puskurit (2/5) Toteutuksesta riippuen kaikki puskurit eivät välttämättä ole käytettävissä Stencil buffer Käytetään rajoittamaan

Puskurit (2/5) Toteutuksesta riippuen kaikki puskurit eivät välttämättä ole käytettävissä Stencil buffer Käytetään rajoittamaan piirtoa pikselin tarkkuudella Accumulation buffer Sisältää väridataa Käytetään lopullisen kuvan koostamiseen Esim. Antialiasing

Puskurit Fragmenttioperaatiot: Scissor test Alpha test Stencil test Depth test Blending Looginen operaatio (3/5)

Puskurit Fragmenttioperaatiot: Scissor test Alpha test Stencil test Depth test Blending Looginen operaatio (3/5)

Puskurit (4/5) Scissor test Näytöltä voidaan rajata neliskulmainen alue jonka ulkopuolelle ei piirretä gl.

Puskurit (4/5) Scissor test Näytöltä voidaan rajata neliskulmainen alue jonka ulkopuolelle ei piirretä gl. Enable(GL_SCISSOR_TEST) gl. Scissor() Alpha test Fragmentti voidaan hylätä sen alpha-arvon perusteella gl. Enable(GL_ALPHA_TEST) gl. Alpha. Func()

Puskurit (5/5) Stencil test Fragmentti voidaan hylätä stencil bufferin arvon perusteella gl. Enable(GL_STENCIL_TEST) gl.

Puskurit (5/5) Stencil test Fragmentti voidaan hylätä stencil bufferin arvon perusteella gl. Enable(GL_STENCIL_TEST) gl. Stencil. Func() & gl. Stencil. Op() Looginen operaatio Bitittäinen operaatio gl. Enable(GL_COLOR_LOGIC_OP); gl. Logic. Op()

Kuvanlaatu Suoritusnopeus vs. kuvanlaatu – kompromissi gl. Hint() Vaikutus toteutusriippuvainen Kappaleiden antialiasointi, tekstuurien perspektiivikorjaus,

Kuvanlaatu Suoritusnopeus vs. kuvanlaatu – kompromissi gl. Hint() Vaikutus toteutusriippuvainen Kappaleiden antialiasointi, tekstuurien perspektiivikorjaus, sumu Kolme vaihtoehtoa GL_NICEST – paras kuvanlaatu GL_FASTEST – nopein suoritus GL_DONT_CARE – ei väliä

Sumu (1/2) Sumun avulla saadaan kauempana olevat kappaleet "hämärtymään" Soveltuu näkyvyyden rajoittamiseen gl. Enable(GL_FOG)

Sumu (1/2) Sumun avulla saadaan kauempana olevat kappaleet "hämärtymään" Soveltuu näkyvyyden rajoittamiseen gl. Enable(GL_FOG) gl. Fog*() Lineaarinen tai eksponentiaalinen parametrit: Lineaarinen: alku- ja loppuetäisyys Exponentiaalinen: tiheys

Sumu (2/2)

Sumu (2/2)

Open. GL Laajennukset Lista ajurin tukemista laajennuksista: gl. Get. String(GL_EXTENSIONS) Nimien alussa kaksi lyhennettä

Open. GL Laajennukset Lista ajurin tukemista laajennuksista: gl. Get. String(GL_EXTENSIONS) Nimien alussa kaksi lyhennettä Laajennuksen tyyppi: GL, GLU, GLX, WGL. . . Mikä taho vastaa laajennuksesta: ARB – ARB: n hyväksymä laajennus EXT – useamman toimittajan hyväksymä laajennus INTEL, SGI, NV, WIN. . toimittajakohtaisia Laajennusten käyttöönotto alustakohtaista

Virheiden käsittely Viimeisin virhekoodi: gl. Get. Error() Kutsun jälkeen virhekoodi nollataan Ei virhettä viimeisimmän

Virheiden käsittely Viimeisin virhekoodi: gl. Get. Error() Kutsun jälkeen virhekoodi nollataan Ei virhettä viimeisimmän gl. Get. Error() kursun jälkeen: GL_NO_ERROR Virhekoodi merkkijonona: glu. Get. Error. String()