OpenGL składanie rotacji

OpenGL składanie rotacji
R1
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:2
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:

Kopiuj
[...] 
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

edytowany 2x, ostatnio: robal1991
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:około 5 godzin
  • Postów:6673
1

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

Kopiuj
// 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ą.


🕹️⌨️🖥️🖱️🎮
edytowany 3x, ostatnio: Spine
R1
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:2
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.

edytowany 2x, ostatnio: robal1991
EE
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:152
0

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


"Robienie w Javie moge porównac do spuszczania wody w kiblu za pomoca wiadra z wodą przyniesioną ze studni zza 7 gór, którą się dodatkowo samemu wykopało łyżeczką do słodzenia herbaty."

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.