U OpenGL kao i u svakom drugom 3D sistemu postoje world i object transformacije.
Problem je u tome sto ne mogu da pratim vrednosti uglova posle mesanja eworld i local transformacije.
Evo na sta mislim:
U 3D studio Max-u objekat mozemo rotirati oko local origin-a i oko world origin-a ( i oko drugih, ali me za sada zanimaju samo ova dva koordinatna sistema).
Zelim da simuliram switch-ovanje izmedju ova dva sistema kada rotiram objekat.
Problem je u ovome:
glRotatef( xAngle, 1, 0, 0 ) - oko x
glRotatef( yAngle, 0, 1, 0 ) - oko y
glRotatef( zAngle, 0, 0, 1 ) - oko z
Pri prvoj rotaciji objekat se rotira oko WORLD ose, a pri ostalim oko svojih NOVIH LOKALNIH osa. NOVE jer ih je prva rotacija rotirala u prostoru.
Ako bi bilo ovako:
glRotatef( yAngle, 0, 1, 0 ) - oko y
glRotatef( xAngle, 1, 0, 0 ) - oko x
glRotatef( zAngle, 0, 0, 1 ) - oko z
Ovde se vrsi WORLD rotacija oko y ose a LOCAL rotacije oko x i z.
Meni trebaju vrednosti projekcija osa lokalnog koord. sistema na world koordinatni sistem ( to sus u sustini pravi uglovi objekta ).
Kako uraditi pravu rotaciju u WORLD koord. sistemu oko sve tri ose?
Mogu da uradim samo jednu rotaciju oko X, pa tek u sledecem ciklusu programa oko Y da bi to bila WORLD transformacija, ali to je neupotrebljivo.
Pokusao sam i preko EULER-ovih jednacina da prebacim iz lokalnog u world sistem, ( koriscenjem sfernih koordinata ) ali, problem je sto je prva rotacija uvek oko WORLD ose a ne oko lokalne.
Znaci: rotiranje oko lokalnih osa - dobiti projekcije na world.
i
rotiranje oko world osa - dobiti tacne projekcije na world koord. sistem.