Grafiikka-algoritmien implementointi
Lakatos, Jonathan (2020)
Lakatos, Jonathan
2020
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2020051511644
https://urn.fi/URN:NBN:fi:amk-2020051511644
Tiivistelmä
Insinöörityössä perehdyttiin tietokonegrafiikan toimintaan ja pureuduttiin grafiikan piirtämisen eri vaiheisiin. Työssä selvitettiin, miten näytönohjaimia hyödynnetään ja miten grafiikan prosessointia voidaan näytönohjaimissa ohjailla varjostinohjelmien avulla. Työssä tutustuttiin myös tietokonegrafiikan historiaan ja siihen, miten se on kehittynyt vuosien varrella. Lisäksi tutustuttiin piirrettävän datan, kuten 3D-mallien ja tekstuurien rakenteeseen, ja selvitettiin, mitä asioita tulee ottaa huomioon, kun näitä halutaan käsitellä näytönohjaimen puolella.
Insinöörityön osana toteutettiin grafiikkasovellus käyttäen C++-ohjelmointikieltä ja OpenGL-rajapintaa. Sovelluksessa luotiin 3D-objekteja, jotka piirrettiin ohjelman luomaan ikkunaan. Ohjelmassa 3D-objektin data vietiin näytönohjaimelle, jossa sitä käsiteltiin verteksi- ja fragmenttivarjostimilla. Sovelluksessa myös tutustuttiin siihen, miten verteksivarjostimessa voidaan matriisien avulla muuttaa näkymän suuntaa ja perspektiiviä tai 3D-objektien kokoa, rotaatiota tai sijaintia.
Sovellukseen toteutettiin myös erilaisia tekstuurienluontifunktioita, kuten Perlinin ja Worleyn kohinatekstuurin luontifunktiot. Sovelluksessa myös hyödynnettiin fraktaaleita erilaisten kuvien luomiseen ja pohdittiin, miten niitä voisi hyödyntää erilaisen tietokonegrafiikan luomisessa. Sovellukseen luotiin myös tekstuurinkäsittelyfunktioita, kuten piirtofunktio, jolla voidaan käsitellä yksittäisiä tekstuurin pikseleitä, tai kontrastifunktio, jolla voidaan muuttaa koko tekstuurin kontrastia.
Sovelluksen kehittäminen kerrytti käytännön kokemusta siitä, miten OpenGL-rajapinnan avulla viedään 3D-objektien ja tekstuurien dataa näytönohjaimelle, sekä siitä, miten varjostimia luodaan ja mitkä ovat niiden funktiot.
Insinöörityön osana toteutettiin grafiikkasovellus käyttäen C++-ohjelmointikieltä ja OpenGL-rajapintaa. Sovelluksessa luotiin 3D-objekteja, jotka piirrettiin ohjelman luomaan ikkunaan. Ohjelmassa 3D-objektin data vietiin näytönohjaimelle, jossa sitä käsiteltiin verteksi- ja fragmenttivarjostimilla. Sovelluksessa myös tutustuttiin siihen, miten verteksivarjostimessa voidaan matriisien avulla muuttaa näkymän suuntaa ja perspektiiviä tai 3D-objektien kokoa, rotaatiota tai sijaintia.
Sovellukseen toteutettiin myös erilaisia tekstuurienluontifunktioita, kuten Perlinin ja Worleyn kohinatekstuurin luontifunktiot. Sovelluksessa myös hyödynnettiin fraktaaleita erilaisten kuvien luomiseen ja pohdittiin, miten niitä voisi hyödyntää erilaisen tietokonegrafiikan luomisessa. Sovellukseen luotiin myös tekstuurinkäsittelyfunktioita, kuten piirtofunktio, jolla voidaan käsitellä yksittäisiä tekstuurin pikseleitä, tai kontrastifunktio, jolla voidaan muuttaa koko tekstuurin kontrastia.
Sovelluksen kehittäminen kerrytti käytännön kokemusta siitä, miten OpenGL-rajapinnan avulla viedään 3D-objektien ja tekstuurien dataa näytönohjaimelle, sekä siitä, miten varjostimia luodaan ja mitkä ovat niiden funktiot.