Kirjoittaa OpenGL:ää käyttävä ohjelma, josta löytyy vaadittuja ominaisuuksia.
Ohjelmoitu Linux-alustalle C-kielellä. Tekstuurit ovat TGA-kuvia, jotka on pakattu gzip:llä (.tga.gz). Gzip pakkaus on tuettu kaikissa datatiedostoissa. Ohjelma ja materiaalit on julkaistu GPL:n alaisena.
Hae paketti land-0.0.5.tar.gz (763kt).
Tee sille oma hakemisto ja pura komennolla tar zxvf land-0.0.5.tar.gz.
Voit kokeilla suoraan kääntämistä komennolla make land, mutta jos se ei onnistu
muokkaa Makefile tiedostoa. Jos käytät Mesaa, joudut ehkä muuttamaa GL-kirjastojen
nimet tyyliin MesaGL.
Ohjelman voi ajaa suoraan komennolla ./land, mutta sille on myös useita parametreja:
-exit-extensions-v-v -v -v -v.-rec tiedosto-play tiedosto-lin-low
Suosittelen ensimmäisellä kerralla ajamaan komennolla
./land -play polku1.rec.gz
Ohjelmaa kontrolloidaan näppäimistöllä ja hiirellä.
Nuolinäppäimillä liikutaan eteen, taakse ja sivuille, q lopettaa, ja välilyönti nauhoittaa reittipisteen,
jos ollaan nauhoitustilassa.
Hiirellä vasemmalla näppäimellä raahaaminen muuttaa katselusuuntaa. Katselumalli on Euklidinen eli sopii
hyvin maan pinnalla kulkevan hahmon malliksi, mutta avaruudessa se on hieman huono.
Oikealla näppäimellä raahaaminen liikuttaa pysty- ja sivusuunnassa.
Hiiren keskinäppäimellä saa esiin valikon, josta voi kääntää valaistuksen, tekstuurit, sumun ja taskulampun
päälle/pois ja vaihtaa rautalankamallin ja täytettyjen polygonien välillä ja varjostustyyliä.

Näytössä on muutamia tietoja:
Cam pos kameran sijaintivektoriCam dir kameran katselusuuntavektorirender fps frame rate, joka tulisi, jos kutsuttaisiin koko ajan pelkästään
renderöintifunktiota.true fps todellinen frame ratetarget tähtäimen alla olevan objektin nimiNo tässähän tämä.
+1p
Lähes kaikki objektit kasataan ensin display-listoihin (+1p).
Ohjelmassa voi valita rautalankamallin ja pintamallin välillä valikosta (+2p).
Kaikki geometriat ovat omia. Vaikka perustyyppejä ei olekaan kuin kolme plus pentagrammi,
ansaitsen tästä mielestäni täydet pisteet (+3p).
Ensimmäinen perustyyppi on korkeuskartta, joka ladataan harmaasävykuvasta,
jokaiselle verteksille lasketaan oma normaali kaikkien siihen liittyvien triangeleiden
normaalien keskiarvona, ja lopuksi teksturoidaan.
Toinen perustyyppi on triangeleista tehty pallo. Sille verteksien normaalien laskeminen
on helppoa, mutta tekstuurin on oltava pallopinnalle suunniteltu.
Hain NASA:lta suoraan sopivat tekstuurit.
Kolmas ja yksinkertaisin perustyyppi on kuutio, jota tässä käytän nk. SkyBox:na.
Pentagrammia käytetään täysvalaistuna, joten sille en ole laskenut normaaleja.
Pentagrammi on myös kasattu triangeleista.
Valmiita geometrioita (tarkoittaa ilmeisesti glut-kirjaston objekteja) ei ole käytetty
lopullisessa versiossa (+0p). Paitsi yksi glutWireSphere lens flarejen koodissa tähden näkyvyyden
tunnistamiseksi.
Muunnosmatriiseja vilisee joka puolella; glTranslatef ja glRotatef
tavallisimmat, mutta myös glScalef löytyy.
Matriisipinoja (glPushMatrix/glPopMatrix) on käytetty
ahkerasti. Omia muunnosmatriiseja ei muistaakseni ole
käytetty. (+4p)
+7p
Täydet pisteet totta kai (+3p)
Kuvaportti ja projektio on määritelty niin, että ikkunaa venyttäessä suhteet pysyvät vakioina eli kuva ei veny.
Kuvan "zoom" määräytyy korkeuden mukaan ja leveys vaikuttaa näkökenttää sivusuunnassa.
Kamera on käyttäjän hallittavissa.
Lisäksi pari efektiä, pentagrammin säteily ja lens flaret, bittikarttatekstin piirtäminen ja kohteen tunnistus
(target) joutuvat joutuvat asettelemaan omia kuvaportin ja projektion määrityksiään. Lähdekoodi kertoo parhaiten.
+3p
Ohjelma käyttää backface cullingia ja z-bufferia.
Ainoastaan lens flarejen näkyvyyden tunnistamisessa en saanut z-bufferia toimimaan
halutulla tavalla; flaret näkyvät, vaikka tähti olisi objektin takana piilossa.
+2p
Tähden valossa on ambient-komponentti, vaikka se ei juuri näykään. Muuten tähden valo tulee
äärettömän kaukaa eli on suunnattu valo.
Pentagrammi sisältää punaisen pistemäisen valonlähteen, josta lähtevän valon intensiteetti vaimenee.
Kameraan on pultattu taskulamppu eli spottivalo, jonka intensiteetti myös vaimenee etäisyyden mukaan.
+3p
Kaikki pinnat, paitsi pentagrammissa, ovat teksturoituja, sekä mip-mapattuja poislukien SkyBox.
Shading-asetusta voi muuttaa ajon aikana.
Lisäksi osa tekstuureista luodaan ohjelmallisesti. Lens flaret luodaan ohjelman alussa, ja
pentagrammin säteilyefektin tekstuuri luodaan kerran framessa.
+4p
Ohjelmasta löytyy menu, se lukee tekstuurit .tga(.gz) tiedostoista ja kamera-ajon tiedostosta,
poiminta/osoitus on näytön target eli näyttää tähdätyn objektin nimen.
Zoomaus, panorointi ja kameran määritys tulevat kaikki kameran liikuttelusta.
Taskulampun saa päälle ja pois, ja se liikkuu kameran mukana.
+5p
Ohjelmaan on määritelty aikafunktio, jota kutsutaan normaalisti 40-50 kertaa sekunnissa.
Se puolestaa kutsuu objektien rekisteröimiä advance-funktioita antaen parametrina todellisen ajan ohjelman
alkamisesta. Näin objektien liike on tasaista (ellei koneteho lopu kesken) ja reaaliaikaan sidottua.
Sama systeemi kutsuu myös kameran advance-funktiota kamera-ajomoodissa (-play).
Kamera-ajon käydessä käyttäjä ei voi vaikuttaa liikkeeseen, mutta voi käyttää menua.
+3p
Mustaa sumua (kts. Demo) löytyy.
Teksti piirretään glut:n bittikarttafontteja hyväksikäyttäen.
Pentagrammin efektissä koko renderöintisyklin aluksi renderöidään pelkkä pentagrammi ja kopioidaan
tulos tekstuuriksi. Myöhemmin tektuuri piirretään triangeleina pentagrammin päälle blendattuna useaan kertaan.
Lens flaret piirretään myös blendattuina triangeleina, jotka sijoitetaan kuvaportin koordinaateissa.
+3p
Yhteensä: 31p
sky/ hakemistossa)Kuvaa klikkaamalla saat sen auki suurempana.
Edellisten lisäksi kehityksen aikana napattuja kuvia löytyy sekalainen joukko täältä.