Sisällys. T-111.4300 Tietokonegrafiikan perusteet. OpenGL-ohjelmointi 11/2007. Mikä on OpenGL?

Samankaltaiset tiedostot
T Tietokonegrafiikan perusteet. OpenGL-ohjelmointi

Luento 3: 3D katselu. Sisältö

Tietokonegrafiikka. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2014

Esimerkkejä. OpenGL ohjelma. OpenGL tilakone. Geometriset primitiivit. Hyvät ja huonot polygonit. OpenGL Pipeline. Rasterointi

T Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

OpenGL:n perusteet - Osa 2: 3D grafiikka

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Visualisoinnin perusteet

Tilanhallintatekniikat

6. Harjoitusjakso II. Vinkkejä ja ohjeita

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Luento 7: 3D katselu. Sisältö

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin


Luento 10: Näkyvyystarkastelut ja varjot. Sisältö

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

T Tietojenkäsittelyopin ohjelmatyö. Testisarja Ray tracing. Tietokonegrafiikka-algoritmien visualisointi. Testisarja Ray tracing

GeoGebra-harjoituksia malu-opettajille

Palauta jokainen funktio-tiedosto. Esitä myös funktiot vastauspaperissasi.

Sisältö. Luento 1: Transformaatiot (2D) 1. Koordinaattimuunnokset. Muunnokset (jatkuu) 2. Perustransformaatiot. Perustransformaatiot (jatkuu)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Luento 6: Tulostusprimitiivien toteutus

811120P Diskreetit rakenteet

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Harjoitus Bones ja Skin

Scratch ohjeita. Perusteet

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

9. Harjoitusjakso III

7. Kuvien lisääminen piirtoalueelle

JUnit ja EasyMock (TilaustenKäsittely)

3. Harjoitusjakso I. Vinkkejä ja ohjeita

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Johdatus Ohjelmointiin

Tietotekniikan valintakoe

Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Harjoitus 2: Oppijan aktivointi ( )

TIES471 Reaaliaikainen renderöinti

OpenOffice.org Impress 3.1.0

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

1 Funktiot, suurin (max), pienin (min) ja keskiarvo

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

TIES471 Reaaliaikainen renderöinti

3. Vasemman reunan resurssiselaimen Omiin resursseihin luodaan uusi Handmade -niminen kansio.

Geodeettisen laitoksen koordinaattimuunnospalvelu

3D-Maailman tuottaminen

Olio-ohjelmointi Javalla

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Matriisilaskenta Laskuharjoitus 5 - Ratkaisut / vko 41

Luento 6: Piilopinnat ja Näkyvyys

4. Luokan testaus ja käyttö olion kautta 4.1

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste

Ohjelmoinnin jatkokurssi, kurssikoe

T Vuorovaikutteinen tietokonegrafiikka Tentti

Tasogeometriaa GeoGebran piirtoalue ja työvälineet

Osoita, että kaikki paraabelit ovat yhdenmuotoisia etsimällä skaalauskuvaus, joka vie paraabelin y = ax 2 paraabelille y = bx 2. VASTAUS: , b = 2 2

Jypelin käyttöohjeet» Ruutukentän luominen

Sovelmat. Janne Käki

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

plot(f(x), x=-5..5, y= )

ITKP102 Ohjelmointi 1 (6 op)

5. Grafiikkaliukuhihna: (1) geometriset operaatiot

T harjoitustyö, kevät 2012

Ohjelmoinnin perusteet Y Python

Graikka yleisesti tietokonepeleissä

Demokoodaus Linuxilla, tapaus Eternity

Rubikin kuutio ja ryhmät. Johanna Rämö Helsingin yliopisto, Matematiikan ja tilastotieteen laitos

Johdatus ohjelmointiin

Harjoitus Morphing. Ilmeiden luonti

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

Matikkaa KA1-kurssilaisille, osa 3: suoran piirtäminen koordinaatistoon

Avaruuden muunnokset Jukka Liukkonen 24. joulukuuta 2009

Matematiikka vuosiluokat 7 9

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Lataa Geometristen kuvien värittäminen - Sympsionics Design. Lataa

2. Aloitus -välilehti, leikepöytä- ja fontti -ryhmät

P e d a c o d e ohjelmointikoulutus verkossa

POHDIN - projekti. Funktio. Vektoriarvoinen funktio

FOTONETTI BOOK CREATOR

ELM GROUP 04. Teemu Laakso Henrik Talarmo

58131 Tietorakenteet ja algoritmit (syksy 2015)

9. Kappale -ryhmä - Kappalemuotoilut

INTERNETSELAIMEN ASETUKSET. Kuinka saan parhaan irti selaimesta

ITKP102 Ohjelmointi 1 (6 op)

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

4.1 Kaksi pistettä määrää suoran

WINDOWS 10 -kurssi.

Valitse ruudun yläosassa oleva painike Download Scilab.

ClassPad 330 plus ylioppilaskirjoituksissa apuna

origo III neljännes D

7. Näytölle tulostaminen 7.1

Transkriptio:

T-111.4300 Tietokonegrafiikan perusteet OpenGL-ohjelmointi 11/2007 Sisällys Mikä on OpenGL? historia nykytilanne OpenGL:n toiminta Piirtäminen ja matriisit Muuta hyödyllistä kameran sijoittaminen valaistus 1

Materiaalia Älä usko assaria, lue kirjoja ja kokeile! Kurssikirjaan (Hearn & Baker) hyvä tutustua OpenGL Programming Guide ja OpenGL Reference Manual erittäin hyviä oppaita, löytyvät myös verkosta: paljon tietoa, jota ei löydy näistä kalvoista http://www.opengl.org/documentation/red_book_1.0/ Linkkejä verkosta löytyvään materiaaliin kurssin harjoitusten linkkisivuilla: http://www.tml.tkk.fi/opinnot/t-111.4300/exercises/links.html Mikä on OpenGL? Matalan tason 2d- ja 3d-grafiikkakirjasto Pohjautuu SGI:n IRIS GL -kirjastoon 80-luvulta Tuettu kaikilla yleisimmillä käyttöjärjestelmillä Tarkoitettu vuorovaikutteiseen tietokonegrafiikkaan Yleiskäyttöinen, ei pelkkä pelikirjasto! Alun perin C-kielelle Nykyään voidaan käyttää myös Pythonilla, Javalla, Perlillä, C#:lla... Nykyiset versiot 1.1-2.0 Version 2.0 lisäarvo OpenGL Shading Language Versio 2.1 julkaistu 2.8.2006 2

OpenGL - kilpailu & tulevaisuus Tärkein kilpailija Microsoftin Direct3D Toimii ainoastaan Windows- ja Xboxympäristöissä Jyräämässä erityisesti peleissä OpenGL:n yli Poikkeuksena Doom 3 Molemmat näytönohjaimeista riippumattomia OpenGL:stä myös mobiililaitteisiin tarkoitettu OpenGL ES -versio OpenGL-apukirjastot OpenGL sisältää kolme erillistä kirjastoa: GL, GLU ja GLUT GL eli varsinainen OpenGL-kirjasto hoitaa ainoastaan renderöinnin GLU (OpenGL Utility Library) tarjoaa projektiofunktioita (esimerkiksi gluperspective, glulookat) GLUT (OpenGL Utility Toolkit) tarjoaa ikkunan hallinnan, fonttien käsittelyn ja erilaisia apufunktioita esimerkiksi yksinkertaisten mallien luomiseen ei virallisesti osa OpenGL-kirjastoa ei käytetä Javassa ikkunoiden luomiseen! 3

Mitä OpenGL ei sisällä? Nämä toiminnallisuudet täytyy ohjelmoida itse, tai käyttää valmiita, OpenGL:n päällä toimivia kirjastoja 1. Scene Graphit OpenGL ei sisällä pysyvää tietorakenetta malleista ja niiden sijainneista, joka säilyisi piirtokertojen välissä Tällaista rakennetta kutsutaan nimellä scene graph 2. Mallien lataaminen OpenGL ei osaa ladata kolmiulotteisia malleja tiedostoista 3. Ray Tracing OpenGL ei tue Ray Tracingia, eli kuvan muodostamista valonsäteiden polkuja seuraamalla Ei toteutettavissa OpenGL:llä Kolmion piirtäminen Kolmion piirtäminen OpenGL:ssä: gl.glbegin(gl.gl_triangles) // Yläkärki gl.glvertex3f( 0.0f, 1.0f,0.0f); // Vasen alanurkka gl.glvertex3f(-1.0f,-1.0f,0.0f); // Oikea alanurkka gl.glvertex3f( 1.0f,-1.0f,0.0f); gl.glend(); Polygoni esitetään sarjana verteksejä, Verteksien välille muodostuvat polygonin sivut Monimutkaisemmat kappaleet koostuvat useista polygoneista 4

OpenGL-ohjelmien toimintaperiaate OpenGL perustuu välittömään tilaan Kaikki kuviot piirretään uudelleen joka piirtokerralla Vastakohtana pysyvä tila Nykyisillä näytönohjaimilla onnistuu tehokkaasti Ihmissilmä kokee miellyttävänä ruudunpäivitysnopeuden, joka on vähintään 40 kuvaa sekunnissa OpenGL Tilakone 1 OpenGL oikeastaan iso tilakone Sisältää yli 100 tilamuuttujaa Kun tila on asetettu, se on voimassa kunnes sitä muutetaan Tilat asetetaan toisistaan riippumattomasti Funktioita tilojen muuttamiseksi Tilat vaikuttavat näytönohjaimen toimintaan Esimerkiksi aktiivinen väri, tekstuuri ja transformaatiot ovat tilan muutoksia Muita tilan muutoksia: valot, sumu... 5

OpenGL Tilakone 2 Tiloja vaihdetaan funktiokutsuilla Komennot vaikuttavat piirrosprosessiin Ei takeita, että lopputulos olisi samanlainen kahdella eri alustalla OpenGL Tilakone 3 6

OpenGL-komentojen syntaksi OpenGL-komennot alkavat etuliitteellä gl, jota seuraa komennon nimi Esim glbegin ja glvertex3f OpenGL-vakiot kirjoitetaan isoin kirjaimin alkavat etuliitteellä GL_ Esim GL_LINE_STRIP Yleensä funktioiden nimet kertovat, montako parametria ne ottavat ja mitä tyyppiä ne ovat Esimerkiksi: glvertex2f (2 float-muotoista parametria) glvertex3f (3 float-muotoista parametria) glvertex3i (3 integer-muotoista parametria) Piirtäminen OpenGL:ssä Kymmenen erilaista piirtoprimitiiviä Muut kuviot ja mallit piirretään näitä primitiivejä käyttäen 7

Yksinkertainen OpenGL-ohjelma public void display(gldrawable drawable) { GL gl = drawable.getgl(); gl.glclearcolor(0.0f, 0.0f, 0.0f, 0.0f); gl.glclear(gl.gl_color_buffer_bit); gl.glortho(-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f); gl.glcolor3f(1.0f, 1.0f, 1.0f); gl.glbegin(gl.gl_polygon); gl.glvertex2f(-0.5f, -0.5f); gl.glvertex2f(-0.5f, 0.5f); gl.glvertex2f( 0.5f, 0.5f); gl.glvertex2f( 0.5f, -0.5f); gl.glend(); } gl.glflush(); Pohjautuu OpenGL Programming Guide -esimerkkiin OpenGL koordinaatistot OpenGL:ssä verteksit saadaan ruudulle sopivaan muotoon kolmella affiinimuunnoksella Kaikki 3d-muunnokset ovat affiinimuunnoksia Voidaan laskea homogeenisillä 4x4 matriiseilla Verteksin muuntaminen: 8

Matriisipinot 1 Matriiseilla määritellään Translaatiot Rotaatiot Skaalaukset Kallistukset (skew) Matriisipino sisältää sarjan muunnosmatriiseja Pinon päällimmäinen matriisi on käytössä oleva matriisi Matriisi lisätään pinoon glpushmatrix()-komennolla Päällimmäinen matriisi poistetaan pinosta glpopmatrix()-komennolla Tyhjää matriisia kutsutaan identiteettimatriisiksi ja sen voi ladata glloadidentity()-komennolla Matriisipinot 2 OpenGL:ssä on kolme matriisipinoa Katselumatriisit (GL_MODELVIEW) Projektiomatriisit (GL_PROJECTION) Tekstuurimatriisit (GL_TEXTURE) Aktiivista matriisipinoa vaihdetaan seuraavasti: glmatrixmode(gl_modelview); glmatrixmode(gl_projection); Objektien asettelu ja käsittely tapahtuu modelview-pinossa 9

3d-muunnokset 1 Kappaleiden saaminen oikeille paikoilleen onnistuu 3d-muunnosten avulla: glrotatef( ) kääntää kuvioita gltranslatef( ) siirtää piirrettävää kuviota. glscalef( ) muuttaa kuvion kokoa. Muunnoksilla muutetaan koordinaatistoa, ei kappaletta Vastaavat Modelview-matriisin ja sopivan muunnosmatriisin tuloa Esim muunnosmatriisi pisteiden kääntämiseksi y-akselin ympäri: 3d-muunnokset 2 1. Talleta ensin nykyinen matriisi pinoon glpushmatrix-komennolla 2. Tee tarvittavat muunnokset Järjestyksellä on väliä! 3. Piirrä objekti 4. Palauta edellinen matriisi glpopmatrixkomennolla 10

Muunnosten järjestys glrotatef(pi/4,0,0,1); gltranslatef(5,0,0); drawcar(); gltranslatef(5,0,0); glrotatef(pi/4,0,0,1); drawcar(); Perustuu Jeff Chastinen esimerkkiin: http://cims.clayton.edu/itsd4305/ 11

12

Translaatio Translaatio Translaatio 13

Rotaatio Translaatio Translaatio 14

Translaatio Translaatio Translaatio2 Translaatio 15

Translaatio 16

Valaistus 1 Valaistu ja valaisematon pallo: Valaistus 2 Valaistus otettava erikseen käyttöön: glenable(gl_lighting); Jokainen valonlähde otettava erikseen käyttöön glenable(gl_light0); Kolmenlaisia valoja: Pointlight pistevalo, säteilee joka suuntaan Spotlight valokeila, säteet rajatussa kulmassa Directional light äärettömän kaukana oleva pistevalo Spotlightin leveyden määrittää GL_SPOT_CUTOFF -parametri 17

Valaistus 3 Valonlähteen paikka määritellään GL_POSITIONparametrin avulla Jos paikkamuuttujan viimeinen arvo on 0, valonlähde on suunnattu valo suunnattu valo on äärettömän kaukana float[] light_position = new float[] { 1.0f, 1.0f, 1.0f, 0.0f }; gl.gllightfv(gl.gl_light0, GL.GL_POSITION, light_position); Valaistus 4 Valonlähteen ominaisuuksia muutetaan gllightfvmetodin avulla, esim: float[] lightdiffuse = new float[] {1.0f, 1.0f, 1.0f, 1.0f}; gl.gllightfv(gl.gl_light0, GL.GL_DIFFUSE, lightdiffuse); Lisää valaistusoppia OpenGL Programming Guidessa: http://www.glprogramming.com/red/chapter05.html 18

Sävytys 1 (shading) Pinnan polygonien varjostusta OpenGL:ssä kaksi tapaa täyttää polygoni: GL_FLAT polygoni täytetään tasaisella värillä, joka on yhden verteksin väri GL_SMOOTH Gouraud-sävytys verteksien värit interpoloidaan polygonin sisäpuolisille pisteille Valitaan glshademodel()-metodilla Ruudun tyhjentäminen Ruudun tyhjennys OpenGL:ssä: glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); Tyhjentää sekä väri- ja syvyyspuskurin Ruuduntyhjennysvärin muuttaminen: glclearcolor(0.0f, 0.0f, 0.0f, 0.0f); 19

Kameran sijoittaminen Helpoin tapa sijoittaa kamera on käyttää glu-kirjaston glulookat()-metodia: eye-koordinaatit määrittävät kameran sijainnin center-koordinaatit pisteen, johon kamera katsoo up-koordinaatit ylöspäin osoittavan vektorin glulookat(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz); Geometriset primitiivit GLUT-kirjastosta löytyy metodit yleisimpien geometristen primitiivien piirtämiseen Erityisesti hyötyä yksinkertaisissa testiohjelmissa Kuution piirtäminen: glutsolidcube(1.0f); Muita GLUT-kirjastosta löytyviä primitiivinpiirtometodeja: glutsolidsphere(), glutsolidicosahedron(), glutsolidtorus() 20