Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: 3D-ohjelmoinnin matematiikkaa

Sivun loppuun

punppis [24.01.2011 22:28:50]

#

Opiskelen peliohjelmointia, mutta 3d-kurssit eivät ole vielä alkaneet. Käytämme koulussa koulun omaa 3d engineä, joka näyttää varsin tehokkaalta ja hyvältä, mutta sen tutoriaalit on melko lyhyehköjä; oletetaan että osataan 3d-ohjelmointia ja keskitytään vain pelimoottorin ominaisuuksiin.

NeHe:n OpenGL-tutoriaali vaikutti hyvältä, mutta on kuulemma vanhentunut, kun uudemmat OpenGL:t käyttää shadereita. Haluaisin siis jonkun tutoriaalin, jossa ei niinkään keskitytä kirjaston tai kielen ominaisuuksiin, vaan yksinkertaisesti tarvittavaan matematiikkaan 3d-ohjelmoinnissa. Matriisit on täysin tuntematon käsite, eikä oikein mistään tunnu löytyvän hyvin selitettyä esimerkkiä.

Olisiko kenelläkään ehdottaa jotain hyvää 3d-tutoriaalia, tälläiseen yleiseen 3d-opiskeluun. Mielellään OpenGL 3.0+ niin oppii sitä siinä ohessa.

Metabolix [24.01.2011 23:00:34]

#

Jos osaat vektorit perin pohjin, pystyt johtamaan kaiken tavallisessa 3D-grafiikassa tarvittavan. Tavalliset toimitukset (yhteenlasku, pistetulo, ristitulo ja näiden sovellukset) riittävät. Ohjelmointiputkassa oleva matematiikkaopas kertoo kaiken tarpeellisen, ja loppu on vain omasta opettelustasi ja ymmärryksestäsi kiinni (pelkkä lukeminen ei riitä).

jmp [25.01.2011 01:40:30]

#

Modernia OpenGL-ohjelmointia voi opiskella englanniksi esimerkiksi näistä oppaista:

GLSL-opiskelun tueksi sopii myös kirja OpenGL Shading Language.

Matriiseista ym. löytyy paljon materiaalia netistä jos niille tulee välttämätön tarve. Metabolixin mainitsemilla matematiikan tiedoilla pääsee kuitenkin jo hyvin pitkälle.

Metabolix [25.01.2011 15:03:24]

#

Muistetaanpa vielä mainita, että GLSL:n käyttö ei vaikuta mitenkään siihen, mitä matematiikkaa pitää osata ja miten mallin piirtäminen ja kameran pyöritys tapahtuvat. GLSL:ää käytetään vasta edistyneempiin asioihin kuten varjostukseen ja efekteihin.

Grez [25.01.2011 18:15:13]

#

punppis kirjoitti:

Matriisit on täysin tuntematon käsite

Metabolix kirjoitti:

Jos osaat vektorit perin pohjin

Mun mielestä outo oletus, että osaisi vektorit perin pohjin, jos matriisit on täysin tuntemattomia. Vektorihan on periaatteessa vaan 1*n matriisi.

Sisuaski [25.01.2011 18:56:01]

#

Grez: ei tuo nyt mitenkään mahdotonta ole. Metabolixin mainitsemat asiat käydään läpi lukiossa, mutta matriiseja ei mainita sanallakaan (tai ainakaan ei mainittu kun itse kävin lukion).

Metabolix [25.01.2011 20:19:53]

#

Grez, preesens-aikamuodosta huolimatta en tarkoittanut, että punppis tällä hetkellä osaisi ne perin pohjin. Kyseinen aikamuoto toimii suomen kielessä myös futuurina. Varsinainen sanomani on siis "opettele vektorit; kun osaat ne" mutta sillä skeptisellä oletuksella, että opettelun lopputuloksena ei välttämättä synny oppimista, minkä vuoksi jossittelu on paikallaan.

Sisuaski on myös aivan oikeassa: Itse en ole koskaan varsinaisesti käyttänyt matriiseja enkä muista ulkoa edes, kummin päin matriisit merkitään eli miten kertolasku tapahtuu. Tämä ei estänyt päättelemästä, miten parilla yksinkertaisella vektorilaskutoimituksella pyöritetään pistettä mielivaltaisen akselin ympäri. Kerran jaksoin vääntää nuo laskuni sellaiseen muotoon, että sain palautettua pyörityksen 3×3-matriisiksi. Tosin kyseinen paperi taisi juuri mennä vihdoin siivouksessa roskiin. :)

os [26.01.2011 14:02:44]

#

OpenGL:n 3D-matematiikan tapauksessa olennaisin sisäistettävä asia on se, miten asioiden siirtelyä ja kääntelyä toistensa suhteen kolmiulotteisessa avaruudessa voidaan kuvata erilaisia koordinaatistomuunnoksia yhdistelemällä.

Koordinaatistomuunnosten ja OpenGL:n komentojen välisen yhteyden sisäistäminen on välttämätön edellytys OpenGL:n toiminnan syvällisempään ymmärtämiseen ja minusta matriisit, joiden avulla OpenGL:n geometriakomentojen toimintaa myös teknisesti määritellään, ovat luonteva työkalu asian hahmottamiseen.

Matriiseilla voi kuvata monia muitakin asioita, joten opettelussa kannattaa keskittyä 3D-geometrian kannalta olennaisiin asioihin, erityisesti 3D-lineaari- ja -affiinikuvausten esittämiseen matriisien avulla. Tässä pari hyvää sivua:

http://www.glprogramming.com/red/chapter03.html (erityisesti kohta "Viewing and Modeling Transformations")
http://en.wikipedia.org/wiki/Transformation_matrix

User137 [27.01.2011 16:55:28]

#

Kuvina oppii matematiikkaa joskus aika hyvin. Ei kaikkia laskutapoja jne tarvitse tietää kun vaan ymmärtää mitä tapahtuu.

Matriisin voi hahmottaa vaikka näin:
Meillä on 1 piste jossain avaruudessa ja siitä lähtee 3 janaa. Perusmatriisissa kaikkien janojen pituus on 1 ja ne ovat toisiinsa nähden 90 asteen kulmassa, kolmeen suuntaan.

That's it... Matriisi sarake sarakkeelta on todellakin 4 vektoria, ja ne on (left, up, front, position). Rotaatiomatriisi jota käytetään eniten, hyödyntää vain kolmea ensimmäistä ja paikkavektori on pelkkää nollaa.

Jos haluaisit saada objektin näkymään pystysuunnassa skaalattuna 2-kertaisena niin kerrot kaikki up-vektorin (3 lukua, xyz) arvot 2:lla.

Deffi [27.01.2011 17:03:02]

#

Harmi kun suomipelit.com meni nurin. Siellä oli suomenkielinen "Matriisimatematiikkaa peliohjelmoijalle" artikkeli, joka oli oikeesti hyvä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta