Obracanie obiektu względem jego środka allegro C++
Ostatnio zmodyfikowano 2022-11-04 17:56
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: 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. |
|
DejaVu |
» 2022-11-04 10:03:21 |
|
AP1994 Temat założony przez niniejszego użytkownika |
» 2022-11-04 17:55:24 dziękuję zadziało. 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 ); }
|
|
DejaVu |
» 2022-11-04 17:56:36 No to good job :) |
|
« 1 » |