[C++, OpenGL] poruszanie obiektem po płaszczyźnie


(Kubal92) #1

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;


   }

}