OpenGL
Johdanto
[muokkaa | muokkaa wikitekstiä]Tämän kirjan tarkoitus on johdattaa OpenGL-ohjelmointirajapinnan käyttöön ja sen avulla myös grafiikkaohjelmointiin yleisesti. Esivaatimuksena on vain alkeellinen C-ohjelmointikielen ja lukiotason geometrian taito: esimerkiksi osoittimia tai matriiseja ei tarvitse ymmärtää.
Ohjelmoijan näkökulmasta OpenGL on rajapinta, jonka avulla voidaan käyttää tietokoneen grafiikkaprosessoria. Samalla se on myös väliohjelmisto, joka helpottaa grafiikkaohjelmoijan työtä. Konkreettisesti OpenGL 1.1 -rajapinta C-ohjelmointikielelle määrittelee 108 komentoa, joista osasta on vielä erikseen versiot erityyppisille lukuarvoille.
OpenGL:n toimintojen listaamisen sijaan kirja keskittyy näyttämään, kuinka asteittain yhä monimutkaisempaa grafiikkaa ohjelmoidaan – teoriapohjaa unohtamatta.
Miksi OpenGL?
[muokkaa | muokkaa wikitekstiä]OpenGL sopii ensimmäiseksi opeteltavaksi grafiikkarajapinnaksi useasta syystä:
- se on runsaasti käytetty standardi ohjelmissa, laitteissa ja opetuksessa
- se ei ole sidottu yhteen käyttöjärjestelmään
- sen käyttö ei vaadi monimutkaista käyttöjärjestelmän tai ohjelmointikielen saloihin perehtymistä
”Kilpailija” DirectX on osa Microsoftin Windows-käyttöjärjestelmiä, ja sen rajapinta muuttuu jatkuvasti versioiden mukaan. Siksi sitä ei ole juuri syytä käyttää opetustarkoituksessa. RenderMan on puolestaan tehty hitaaseen fotorealistisen elokuvagrafiikan tuottamiseen, eikä ohjelmoijalla siten ole samanlaista välitöntä otetta lopputulokseen.
OpenGL on melko matalan tason rajapinta – siinä piirretään kolmioita eikä asetella 3d-malleja. Sen sijaan voi käyttää valmista grafiikkamoottoria. Esimerkiksi OGREa on käytetty sekä kursseilla että oppikirjoissa. Se edustaa hyvää olioarkkitehtuuria, ja sen opiskelu vaatii hyvät tiedot C++-kielestä. Perehtyminen kestää aikansa: OGREn kehittäjät myöntävät sen olevan suuri ja monimutkainen järjestelmä. Lisäksi on kiistanalaista, opettaako OGREn kaltaisen korkean tason grafiikkakirjaston käyttö varsinaista grafiikkaohjelmointia vai enemmänkin grafiikkaan soveltuvaa olioarkkitehtuuria.
Osa 1: Vektorigrafiikkaohjelmoinnin perusteet OpenGL:n avulla
[muokkaa | muokkaa wikitekstiä]Pikseleistä perspektiiviprojektioon ja pintakuviointiin.
Ennen tositoimia
[muokkaa | muokkaa wikitekstiä]OpenGL:n perusteet
[muokkaa | muokkaa wikitekstiä]Ikkunoita, koordinaatistoja ja muotoja.
- Tapahtumien käsittelyyn perustuva rakenne
- OpenGL:n käytäntöjä
- Geometristen alkioiden piirtäminen
- Animaation perusteet
Kolmanteen ulottuvuuteen
[muokkaa | muokkaa wikitekstiä]Asetelmia, kameroita ja matriisipinoja.
- Matriisi 3d-grafiikassa
- Perspektiiviprojektio
- Kamera maailmaa pyörittää
- Asetelman muodostaminen
- Valo ja varjostus
- Pintakuviointi
- ...
Osa 2: Taitojen hiomista
[muokkaa | muokkaa wikitekstiä]Käytännön taitoja
[muokkaa | muokkaa wikitekstiä]OpenGL:ssä on valmiita ratkaisuja ongelmiin, joihin grafiikkaohjelmoija törmää usein. Lisäksi tutustutaan muutamaan OpenGL 1.1:n tukemaan optimointikeinoon.
Vaativia efektejä
[muokkaa | muokkaa wikitekstiä]OpenGL standardista 1.1 eteenpäin; etenkin peleihin sopivia erikoisefektejä.
Animaatiotekniikoiden esittely
[muokkaa | muokkaa wikitekstiä]Kolmiulotteiset animaatiotekniikat tarvitsisivat oman kirjansa. Tämän osion tarkoitus on sivistää esittelemällä yleisimpiä tekniikoita.
Liitteet
[muokkaa | muokkaa wikitekstiä]Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- The Official Guide to Learning OpenGL, Version 1.1 (tunnetaan nimellä The Red Book)
- OpenGL Reference Manual (versioon 1.1, tunnetaan nimellä The Blue Book)
- OpenGL 2.1 Reference Pages
- The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3 Specification
- NeHe OpenGL Tutorials
- Ohjelmointiputka: SDL:n ja OpenGL:n yhteiskäyttö
OpenGL muilla ohjelmointikielillä
[muokkaa | muokkaa wikitekstiä]- CsGL: C# graphics library (OpenGL-sidokset C#-kielelle, vanha)
- PyOpenGL: The Python OpenGL Binding
- ruby-opengl (OpenGL-sidokset Ruby-kielelle)
- Haskell-kielen hierarkisessa kirjastokokoelmassa on valmiina OpenGL 2.1, GLU 1.3 ja GLUT 3.7 -sidokset.