OpenGL składanie rotacji

0

Mam problem z moim projektem - tetris 3D w openGLu. Otóż mam sobie taki wielościan, który chce obracać w 3 osiach, aktualne obroty zapamiętuje w anglex, angley i anglez.

No i robie to w ten sposób:

[...] 
glRotatef(anglex,1.0f,0.0f,0.0f);
glRotatef(angley,0.0f,1.0f,0.0f);
glRotatef(anglez,0.0f,0.0f,1.0f);
Rysuj()
[...]

Problem jest tylko taki, że po obrocie wokół osi OX, pozostałe osie są już w innych miejscach (bo układ współrzędnych się obraca), więc obroty się potem nie zgadzają. Próbowałem już glPushMatrix i glPopMatrix, próbowałem też wymnażania macierzy rotacji, próbowałem też kątów Eulera - notacji XYZ, od tyłu też, i ZYZ, ale nie udało mi się rozwiązać tego problemu.
Przy obsłudze klawisze póki co, zwiększam bądź zmniejszam odpowiedni angle_ o 90 stopni.

Proszę o pomoc jak mógłbym ten problem rozwiązać.
Dzięki

1

Na Twoim miejscu w ogóle bym nie ruszał obrotu wokół osi Z, kolejność też bym zastosował inną:

// kod przeksztalcen czytaj od dolu ;)
glRotatef(angley,0.0f,1.0f,0.0f); //wedlug macierzy przeksztalcen potem ustawiasz obrot wokol "wlasnej osi"
glRotatef(anglex,1.0f,0.0f,0.0f); //wedlug macierzy przeksztalcen najpierw ustawiasz nachylenie do podloza

No i oczywiście translacja musi być wykonywana przed rotacją (nad linijkami rotate) - piszę na wypadek, gdybyś w funkcji rysuj wstawił translate.

Między glPushMatrix() i glPopMatrix() wsadzasz rysowanie każdego klocka indywidualnie wraz z jego rotacjami i translacją.

0

Hm, u mnie angle mają wartości ze zbioru {0,90,180,270}, więc jeśli chcę porzucić anglez, to zostaje 4^2 możliwych kombinacji anglex i angley. A ustawień kostka w przestrzeni 3D jest 24 różnych, więc chyba nie mogę odrzucić anglez... bo to po prostu nie wystarczy do opisania wszystkich możliwych rotacji. :(

Poza tym, zależy mi, że użytkownik mógł obracać klocki wokół każdej z 3 osi układu współrzędnych.

Translacje mam nad rotacjami :) PushMartix i PopMatrix mam też tak jak mówisz.

0

Lepiej sam sobie skontruuj macierz rotacji i samodzielnie składaj przekształcenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1