Особенность функции glRotatef () заключается в том, что она может вращаться только вокруг начала координат.Таким образом, для вращения вокруг определенной точки необходимо перевести эту точку в начало координат, выполнить вращение и перевести обратно.Итак, для вашей точки (10, -5, 0) вы должны сделать:
glPushMatrix(); // you do this to avoid disturbing the transformation matrices for any code following the below lines
glTranslatef(-10, +5, 0); // translate so that (10, -5, 0) lies at the origin
glRotatef(45, 0, 0, 1); // now rotate
glTranslatef(10, -5, 0); // translate back
// now you have rotated the scene by 45 degrees arround z-axis, at point (10, -5, 0)
// (draw your object *here*)
glPopMatrix(); // the old matrix is back
// now it is as if nothing happened
Матрица push / pop часто неправильно понимается, поэтому я привел пример.В новом OpenGL нет неявного стека матриц, поэтому нужно управлять его матрицами вручную.Это становится немного сложнее, но в ответ нет путаницы.