Вращения всегда происходят относительно системы координат получаемых вершин.Ваш объект кажется плоскостью, которая находится на уровне -5,0 по оси Z.Матрица вращения вращается вокруг начала координат (0, 0, 0) системы координат.Поскольку ваш объект не центрирован в начале координат, он будет вращаться вокруг источника.
Типичный способ справиться с этим - перевести объект в начало координат, выполнить вращение, а затем перевести его обратно.В вашем случае это будет выглядеть так:
glTranslatef(0.0f, 0.0f, -5.0f); //Translate back to the original location.
glRotatef(...); //Rotate.
glTranslatef(0.0f, 0.0, 5.0f); //Translate to the origin
Обратите внимание, что вы всегда должны читать последовательные операции преобразования снизу вверх.
Обновление
Следует отметить, что вышеупомянутое решение является скорее пробелом.Типичный способ сделать это - модели построены вокруг источника.Эта система координат обычно называется «пространством модели».
Вы поворачиваете точки в пространстве модели, а затем переводите их в положение в мире, где вы их хотите.Единственная причина, по которой нам пришлось переместить ее в исходный код в приведенном выше коде, заключалась в том, что модель не была построена в пространстве модели, поэтому нам пришлось переместить ее в пространство модели.