Kuinkakohan tehdään matriisi, jolla pyöritetään pistettä mielivaltaisen akselin ympäri niin kuin OpenGL:n rotate-käskyillä. Katsoin ogl-redbookin nettiversiosta, muutta en oikein ymmärtänyt siinä esitettyjä kaavoja:
The call glRotate*(a, x, y, z) generates R as follows: Let v = (x, y, z)T, and u = v/||v|| = (x', y', z')T. | 0 -y' y'| S = | z' 0 -x'| and M = uuT(yläindeksi) + (cos a)(I-uuT(yläindeksi)) + (sin a)S |-y' x' 0|
Siis mitä? Mitä ovat nuo uuT:t?
Toinen kysymys:
Saako OpenGL:ssä jotenkin selville mihin kohtaan ruutua se lopulta sijoittaa polygonien kulmapisteet, vai pitääkö niille itse tehdä samat pyoritys- ja siirto-operaatiot laskeakseen lopulliset paikat?
Olkoon u mielivaltainen nxm matriisi. Tällöin u^T on mxn matriisin, jolle (u^T)(i,j)=u(j,i) kaikilla 0<j<n+1, 0<i<m+1. Matriisia u^t sanotaan u:n transpoosiksi tai transponoiduksi matriisiksi.
uu^T tarkoittaa että matriisi u on kerrottu oikealta transpoosillaan.
Jaa, minä kun luulin, että nuo v ja u ovat vektoreita. Miten ne sitten luodaan x:stä, y:stä sekä z:sta, ja mitä se T niiden perässä tarkoittaa?
Kaippa kun matriisi kerrotaan puhtaalla luvulla (tuossa kosinilla ja sinillä), sen jokainen alkio kerrotaan sillä, vai onko se monimutkaisempi toimenpide?
Kyllähän x', y' ja z' tarkoittavat vektorin yksikkövektoriksi lyhennetyn version komponentteja, vai päättelinkö senkin väärin?
Tämä pyörittää vektorin ( u, v, w ) ympäri a astetta.
[ cos(a)+u*u*(1-cos(a)) -w*sin(a)+u*v*(1-cos(a)) v*sin(a)+u*w*(1-cos(a)) ] [ w*sin(a)+v*u*(1-cos(a)) cos(a)+v*v*(1-cos(a)) -u*sin(a)+v*w*(1-cos(a)) ] [ -v*sin(a)+w*u*(1-cos(a)) u*sin(a)+w*v*(1-cos(a)) cos(a)+w*w*(1-cos(a)) ]
Vektorit ovat erikoistapauksia matriiseista joten puhuin matriiseista koska transponointi on määritelty myös niille. v saadaan x:stä, y:stä ja z:sta laittamalla kyseiset muuttujat alkioiksi, ja T tarkoittaa transpoosia, 1x3 -vektorin (matriisin) muuntamista 3x1 -vektoriksi (matriisiksi).
Olet tn oikeassa tuon skalaarilla kertomisen ja normittamisen suhteen.
Tajusin tuon eilen itsekin. En vain aluksi ajatellut tarpeeksi pitkälle ja hoksannut että u*uT -kertolaskusta tuleekin oikean kokoinen matriisi. Tuo kaavahan sieventyy Markuksen esittämään muotoon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.