Muszę wykonać zdanie na OpenGL w którym patrząc z oczu obserwatora będę poruszał robotem (nie musi mieć animacji, w zasadzie może być to bryła). Musi chodzić do przodu i tyłu oraz skręcać na boki. Na dodatek ma mieć możliwość poruszania głową na boki.
Zasadniczo chce skorzystać z funkcji glTranslatef oraz glRotatef żeby przesuwać obiekt.
Pod klawiszami W i S mam zwiększanie i zmniejszanie zmiennej ruch a pod A i D to samo dla zmiennej kąt.
Te zmienne są przekazywane do glTranslatef i glRotatef jako parametry.
Wygląda to mniej więcej tak:
glPushMatrix();
glRotatef(kat, 0, 1, 0);
glTranslatef(0, 0, ruch);
DrawRobot();
glPopMatrix();
Problem jest w tym że taka kolejność operacji sprawia że pomimo przemieszczenia robota o jakiś wektor, wektor wokół którego obracam robota pozostaje zaczepiony w punkcie (0, 0, 0). W ten sposób tylko w pkt (0, 0, 0) robót obraca się wokół własnej osi, gdy opuści ten obszar porusza się po okręgu.
Gdy zmienię kolejność translacji i obrotu to robot obraca się wokół własnej osi jednak obrót ten nie wpływa na kierunek przemieszczania, tzn. robot zawsze chodzi w wzdłuż tej samej prostej.