Вам нужно поменять местами команды перевода и поворота (в обратном порядке):
glTranslatef(xF, yF, 0);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
// draw
glRotatef(-angle, 0.0f, 0.0f, 1.0f);
glTranslatef(-xF, -yF, 0);
Как указывает @Nicol ниже, вероятно, будет быстрее использовать glPushMatrix
/ glPopMatrix
, поскольку glRotatef
требует построения матрицы вращения с синусами и косинусами.
Более того, поворот, за которым следует его обратное вращение, может не быть точно единицей из-за ошибок округления с плавающей запятой. Это означает, что если вы полагаетесь на эту технику во внутреннем цикле (как вы делали выше), вы можете накопить некоторые существенные ошибки с плавающей запятой в течение всего вашего вызова отрисовки.