Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

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

Samankaltaiset esitykset


Esitys aiheesta: "Sisältö (1/2) 1. osa Yleistä OpenGL:stä OpenGL:n arkkitehtuuri Perusteet kappaleiden piirtämisestä Muunnokset ja matriisit Näkyvyyden määrittäminen Kappaleiden."— Esityksen transkriptio:

1

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

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

4 Yleistä OpenGL:stä (1/2) OpenGL 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ä OpenGL:n käyttöönotto(GLX, WGL) Nykyiset versiot 1.1-1.4 Versio 2.0 tekeillä

5 Yleistä OpenGL:stä (2/2) OpenGL 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

6 OpenGL:n arkkitehtuuri (1/3) OpenGL 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

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

8 OpenGL:n arkkitehtuuri (3/3) OpenGL: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

9 OpenGL rajapintana OpenGL 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ä.

10 Vilkaisu "pellin alle" Alla karkea kaaviokuva OpenGL:n renderöintiprosessista

11 OpenGL 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

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

13 OpenGL API (3/3) Esimerkki: glVertex*() glVertex2f(2.0f, 3.0f) glVertex3i(2, 3, 0) glVertex4d(4.0, 1.0, -0.5, 2.0) float v[] = {1.0f, 2.0f, 3.0f}; glVertex3fv(v)

14 GLUT & OpenGL 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ä

15 GLUT & OpenGL perusteet (2/8) Yksinkertainen esimerkki GLUT:n käyttöönotto glutInit() glutInitDisplayMode() glutInitWindowPosition() & glutInitWindowSize() glutCreateWindow() glutMainLoop() Callbackien rekisteröinti

16 GLUT & OpenGL perusteet (3/8) Puskureiden tyhjentäminen glClear() Tyypillisimmät parametrit GL_COLOR_BUFFER_BIT – näyttöpuskuri GL_DEPTH_BUFFER_BIT – z-puskuri glClearColor() valitsee värin, jolla näyttö tyhjennetään glClearDepth() asettaa z-arvon jolla z-puskuri tyhjennetään

17 GLUT & OpenGL perusteet (4/8) Kuinka taata se että komennot on suoritettu glFlush() pakottaa aloittamaan komentojen suorituksen glFinish() kuten glFlush() mutta odottaa kunnes komennot on suoritettu

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

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

20 GLUT & OpenGL perusteet (7/8) Kappaleen verteksit määritetään glVertex*() kutsuilla Verteksi "perii" kutsun aikana voimassa olleen värin, normaalivektorin, tekstuurikoordinaatit sekä reunalipun Näitä voidaan vaihtaa Väri: glColor()* tai glIndex*() Normaalivektori glNormal*() Tekstuurikoordinaatit: glTexCoord*() Reunalippu: glEdgeFlag()

21 GLUT & OpenGL perusteet (8/8)

22 Tilojen hallintaa Erilaisia asetuksia kolmenlaisia Aina käytössä olevat "on/off"-tyyppiset asetukset "on/off" + parametrit Tiloja säädellään glEnable() / glDisable()- parilla Parametrit asetetaan omilla komennoilla glIsEnabled() & glGet*()

23 Matriisit ja muunnokset (1/8)

24 Matriisit ja muunnokset (2/8) Matriisin valinta glMatrixMode() Modelview-matriisin muunnokset Skaalaus: glScale*() Kierto: glRotate*() Siirto: glTranslate*() "kamera": gluLookAt() Muunnoksilla muutetaan koordinaatistoa, ei kappaletta

25 Matriisit ja muunnokset (3/8) Projektiomatriisi Perspektiiviprojektio glFrustum() gluPerspective() Ortografinen projektio glOrtho() gluOrtho2D()

26 Matriisit ja muunnokset (4/8) Normaali perspektiiviprojektio:

27 Matriisit ja muunnokset (5/8) Ortografinen projektio

28 Matriisit ja muunnokset (6/8) Muita matriisin käsittelyfunktioita: glLoadIdentity() - identtinen matriisi glMultMatrix() - kerrotaan matriisilla glLoadMatrix() - asetetaan matriisi

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

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

31 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 glEnable(GL_CULL_FACE) Poistetaanko etu- vai takaperin olevat polygonit: glCullFace() Kumminko päin on takaperin: glFrontFace()

32 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 glEnable(GL_CLIP_PLANEi) glClipPlane()

33 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 oleva arvo aina kun pikseli piirretään, korvataan z-arvo

34 Näkyvyyden määrittäminen (4/4) glEnable(GL_DEPTH_TEST) puskurin toimintatavan valinta: glDepthFunc() glClearDepth() glClear(GL_DEPTH_BUFFER_BIT) Kähden lähekkäisen kappaleen keskinäinen z- järjestys saattaa vaihdella ikävästi glPolygonOffset()

35 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

36 Verteksitaulukot ja listat (2/5) glEnableClientState() Taulukot välitetään gl*Pointer() komennoilla Color, Index, EdgeFlag, Normal, TexCoord, Vertex eli kaikki vertekseihin vaikuttava data voidaan välittää taulukoina taulukot myös mahdollista yhdistää: glInterleavedArrays() glDrawArrays() - piirretään kappaleita suoraan aktiivisista taulukoista glDrawElements() - piirretään kappaleita aktiivisista taulukoista indeksoituna

37 Verteksitaulukot ja listat (3/5) Listat (Display lists) lista johon koottu OpenGL-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 3D-kiihdytin voi varastoida listan omaan muistiinsa

38 Verteksitaulukot ja listat (4/5) Listan luominen Pyydetään listalle tunniste glGenLists():llä Annetaan halutut komennot glNewList()/glEndList() välissä Kaikkia komentoja ei voi tallettaa listaan glGet*() Verteksitaulukot Taulukkomuodossa annetusta datasta vain sen hetkiset arvot tallettuvat Listoja voidaan koostaa hierarkkisesti Myös GLU komentoja voidaan tallettaa listaan

39 Verteksitaulukot ja listat (5/5) Listan käyttö glCallList() listaa kutsuttaessa komennot suoritetaan talletusjärjestyksessä ei tarvita glBegin()/glEnd() Listassa olevat tilanmuunnokset jäävät voimaan! glCallLists() suorittaa taulukossa annetut listat

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

41 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

42 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)

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

44 Valaistus (5/7) Valojen käyttö OpenGL tukee ainakin 8 samanaikaista valonlähdettä glShadeModel() glEnable(GL_LIGHTING) Valoja voidaan käyttää toisistaan riippumatta glEnable(GL_LIGHTi) Kappaleiden vertekseille määritettävä normaalivektorit

45 Valaistus (6/7) Valojen parametrien asettaminen: glLight*() 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

46 Valaistus (7/7) Materiaalit glMaterial() 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") glColorMaterial()

47 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

48 Tekstuurit (2/16) Tekstuurien luominen Luodaan uusi tekstuuriobjekti Luodaan tai luetaan tekstuuridata muistiin Generoidaan tunniste: glGenTextures() Valmistellaan tekstuuriobjekti Aktivoidaan luotu tekstuuriobjekti: glBindTexture() Siirretään tekstuuridata OpenGL:n käyttöön: glTexImage2D() Asetetaan parametrit

49 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 gluBuild2DMipmaps()

50 Tekstuurit (4/16)

51 Tekstuurit (5/16) Tekstuurin käyttö glEnable(GL_TEXTURE_2D) Aktivoidaan haluttu tekstuuri glBindTexture() Asetetaan vertekseille tekstuurikoordinaatit glTexCoord2D() Tekstuurikoordinaatit välillä 0-1 Koordinaatit muunnetaan tekstuurimatriisilla

52 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 glTexParameter() GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T GL_CLAMP tai GL_REPEAT

53 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 4x4 matriisi kuin tavallisillekin koordinaateille Kaikki muunnokset mahdollisia, jopa perspektiivi!

54 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

55 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

56 Tekstuurit (10/16) Valinta glTexParameter()-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ä

57 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)

58 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

59 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

60 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

61 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

62 Tekstuurit (16/16)

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

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

65 Käyrät ja pinnat (3/4) Evaluaattoreiden käyttö Määritetään ohjauspisteet halutuille evaluaattoreille: glMap*f() Otetaan halutut evaluaattorit käyttöön: glEnable(GL_MAP?_*) Evaluoidaan: glEvalCoord*() Helpompi tapa: Luodaan tasavälinen "portaikko": glMapGrid*() Evaluoidaan halutulla askelvälillä: glEvalMesh*()

66 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

67 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: RsCs + RdCd Piirtojärjestyksellä on siis merkitystä

68 Blending (2/4) glEnable(GL_BLEND) Kertoimet määrittävä funktio: glBlendFunc() tavallisin tapaus: glBlendFunc(GL_ONE, GL_ZERO) + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); "static lightmaps": glBlendFunc(GL_ONE, GL_ZERO) + glBlendFunc(GL_DST_COLOR, GL_ZERO);

69 Blending (3/4)

70 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 z- puskurista glDepthMask()

71 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

72 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

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

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

75 Puskurit (5/5) Stencil test Fragmentti voidaan hylätä stencil bufferin arvon perusteella glEnable(GL_STENCIL_TEST) glStencilFunc() & glStencilOp() Looginen operaatio Bitittäinen operaatio glEnable(GL_COLOR_LOGIC_OP); glLogicOp()

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

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

78 Sumu (2/2)

79 OpenGL Laajennukset Lista ajurin tukemista laajennuksista: glGetString(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

80 Virheiden käsittely Viimeisin virhekoodi: glGetError() Kutsun jälkeen virhekoodi nollataan Ei virhettä viimeisimmän glGetError() kursun jälkeen: GL_NO_ERROR Virhekoodi merkkijonona: gluGetErrorString()


Lataa ppt "Sisältö (1/2) 1. osa Yleistä OpenGL:stä OpenGL:n arkkitehtuuri Perusteet kappaleiden piirtämisestä Muunnokset ja matriisit Näkyvyyden määrittäminen Kappaleiden."

Samankaltaiset esitykset


Iklan oleh Google