Как работают трансформации в 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 градусов вправо, но она этого не делает, как это работает?


Ответы (0 шт):