Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obracanie obiektu względem jego środka allegro C++

Ostatnio zmodyfikowano 2022-11-04 17:56
Autor Wiadomość
AP1994
Temat założony przez niniejszego użytkownika
Obracanie obiektu względem jego środka allegro C++
» 2022-11-04 01:43:44
Jak mam napisać obrót wyświetlanego elementu tak, aby oś obrotu była w centrum obiektu, a wyświetlany obiekt nie zmienił pozycji w osiach x, y. Napisałem coś takiego:
C/C++
///kod z funkcji obracającej:
float theta =( float )( angle * M_PI ) / 180;
ALLEGRO_TRANSFORM camera;
al_identity_transform( & camera );
al_translate_transform( & camera, x - w / 2, y - h / 2 );
al_rotate_transform( & camera, theta );
al_use_transform( & camera );
draw();
Niestety al_translate_transform(&camera,x-w/2,y-h/2) przemieszcza osie x i y, a kiedy używam al_translate_transform(&camera,x,y) obrót nie jest w centrum obiektu.
P-179751
DejaVu
» 2022-11-04 10:03:21
https://www.youtube.com/watch?v=9KwinDe6Ovg - zerknij na ten filmik. Jest pokazane jak rozwiązanie działa oraz jest kod.
P-179752
AP1994
Temat założony przez niniejszego użytkownika
» 2022-11-04 17:55:24
dziękuję zadziało.
C/C++
void StarShip::rotation_draw( unsigned char rand, int sw, int sh, int angle )
{
   
float pozytion[ 1 ];
   
pozytion[ 0 ] = -( sw / 2 ) +( x + w / 2 );
   
pozytion[ 1 ] = -( sh / 2 ) +( y + h / 2 );
   
if( pozytion[ 0 ] < 0 )
       
 pozytion[ 0 ] = 0;
   
   
if( pozytion[ 1 ] < 0 )
       
 pozytion[ 1 ] = 0;
   
   
float theta =( float )( angle * M_PI ) / 180;
   
ALLEGRO_TRANSFORM camera;
   
al_identity_transform( & camera );
   
al_translate_transform( & camera, -( x + w / 2 ), -( y + h / 2 ) );
   
al_rotate_transform( & camera, theta );
   
al_translate_transform( & camera, pozytion[ 0 ] +( x + w / 2 ), pozytion[ 1 ] +( y + h / 2 ) );
   
al_use_transform( & camera );
   
draw( rand );
}
P-179753
DejaVu
» 2022-11-04 17:56:36
No to good job :)
P-179754
« 1 »
  Strona 1 z 1