Как работают трансформации в allegro? Библиотека allegro
есть функция, которая рисует корабль на экране, этот корабль должен изменять свое положение и вертеться вокруг своей оси, вот она:
void draw_spaceship(int x,int y,float degrees,ALLEGRO_COLOR color)
{
ALLEGRO_TRANSFORM transform;
al_identity_transform(&transform);
al_translate_transform(&transform,x,y);
al_rotate_transform(&transform,degrees);
al_use_transform(&transform);
al_draw_line(-8,9,0,-11,color,THICKNESS_SHIP);
al_draw_line(0,-11,8,9,color,THICKNESS_SHIP);
al_draw_line(-6,4,-1,4,color,THICKNESS_SHIP);
al_draw_line(6,4,1,4,color,THICKNESS_SHIP);
al_identity_transform(&transform);
al_use_transform(&transform);
}
получается какой-то бред,если поменять
al_translate_transform(&transform,x,y);
al_rotate_transform(&transform,degrees);
на
al_rotate_transform(&transform,degrees);
al_translate_transform(&transform,x,y);
то координатная ось изменяется по другому, может это связано с последовательностью умножения матриц? по сути функция в первом примере должна сначала перенести координатную ось относительно начальной условно в точку(50,50), затем она должна повернуть эту ось, тоже условно на 90 градусов вправо, но она этого не делает, как это работает?