Aihepiiri: grafiikka
3D-visualisointi
Tee yksinkertainen 3D-visualisointi- ja mallinnusohjelma käyttäen esim. PyQt-grafiikkakirjastoa. Ohjelma saa syötteenään kuvauksen suljetusta ympäristöstä, jota tulee voida tarkastella ja jossa tulee voida liikkua ohjelman avulla.
Ympäristö, jota ohjelman tulee pystyä visualisoimaan, voidaan ajatella esimerkiksi yksikerroksisena talona, jossa ei ole ikkunoita eikä ovia ja joka on tyhjä. Talossa on siis käytännössä vain seiniä, käytäviä sekä huoneita. Lisäksi jos ajatellaan mallinnettavan ympäristön pohjakaavaa, niin siinä on seiniä vain pohjois-etelä ja itä-länsi suunnissa, eli ei lainkaan ns. vinoja seiniä. Pohjapiirrustuksessa ei ole myöskään mitään muita "epämääräisiä" muotoja, ainoastaan suoria seiniä ja näiden liitoksissa suoria kulmia. Ympäristöä voi ajatella myös eräänlaisena labyrinttina, jossa on käytävien lisäksi myös isompia huoneita.
Ympäristössä pitää voida myös liikkua kaikkiin neljään pääilmansuuntaan, ja näkymän tulee päivittyä kulloisenkin sijainnin ja katsantosuunnan (joita ovat samat neljä pääilmansuuntaa) mukaisesti. Seinien läpi liikkuminen on kuitenkin kiellettyä. Liikkuminen saa olla karkeata, eli siirtyminen tapahtuu ruudun välein (yksi ruutu on yhden koordinaatin muutos sijainnissa).
Toteuta ohjelmasi testausta varten ainakin yksi riittävän monipuolinen oma huoneistoympäristö, jolla voit myös demota ohjelmaasi. Ohjelma lataa käytettävän ympäristömallin tiedostosta, jonka formaatin voit määritellä itse.
Vaatimukset
Keskivaikea-vaativa
- valmiita 3D-kirjastoja EI saa tässä käyttää!
- Tehtävänannon vaatimukset toteutettuna alkeellisella grafiikalla
- Seinistä ei näy läpi, ja seinän värin tummuus riippuu sen etäisyydestä. Seinäkappaleet voivat olla yksivärisiä tai tekstuurein täytettyjä. Eräs helppo tapa mallintaa ympäristöä on aloittaa piirtäminen aina kauimmaisesta mahdollisesta seinästä (vaikka se ei oikeasti olisi näkyvissäkään) ja piirtää seuraavaksi kauimpana oleva seinä edellisen päälle. Näin edeten viimeisenä piirretty seinä (eli katsojaa lähin seinä ko. suunnassa) peittää kauempana (takanaan) olevat seinät ja näkymä on lopulta oikea.