Witam.
Chcę poruszać się obiektem po płaszczyźnie w następujący sposób za pomocą glTranslated(x,y,z) :
a - obrót w lewo
d - obrót w prawo
w - ruch do przodu z uwzględnieniem kąta przy obrocie
s - ruch do tyłu z uwzględnieniem kąta przy obrocie
Nie mam pojęcia jak to zrobić. Wiem, że trzeba wykorzystać sinusa i cosinusa, ale nie wiem jak to skleić razem. Rotację w lewo i prawu już udało mi się zrobić. Kąt przechowuje zmienna rotateZ. Zmienna t to czas. Oto fragmenty kodu.
Teraz tylko idzie po osi X do wartości 2.0f (żeby poza kamerę nie wyszedł). STATE_CHANGE_MOVE_BACKWARD idzie do -2.0f z tej samej przyczyny.
case STATE_CHANGE_MOVE_FORWARD:
if( moveX < 2.0f )
moveX = moveX_start + moveX_value * ( t - moveX_time_start ) / ( moveX_time_end - moveX_time_start );
if ( t > moveX_time_end )
{
state_list.remove( STATE_CHANGE_MOVE_FORWARD );
}
To się dzieje po naciśnięciu klawisza W:
if ( keyStates['w'] ) {
if (!findState(STATE_CHANGE_MOVE_FORWARD)) {
state_list.remove( STATE_CHANGE_MOVE_BACKWARD );
state_list.push_front( STATE_CHANGE_MOVE_FORWARD );
moveX_start = moveX;
moveX_value = 0.1;
moveX_time_start = getTime();
moveX_time_end = moveX_time_start + 100;
}
}