Вы немного неправильно понимаете вещи.
Вы ничего не вращали, вызвав glRotatef. Когда вы вызываете glRotate, вы изменяете матрицу преобразования, данные объекта остаются неизменными. Когда вы визуализируете объект, данные вершин проходят через конвейер обработки вершин, умножаются на матрицу преобразования (каждый раз, когда вы визуализируете объект), и технически вы не можете получить результат вычислений обратно - потому что объект не был изменен.
Ну, если вы действительно этого хотите, вы можете попробовать использовать буферы обратной связи gl (см. GlFeedbackBuffer), но я не вижу причины для этого. Я думаю, что "Красная книга OpenGL" может иметь примеры буферов обратной связи, но я не уверен в этом. Буферы обратной связи МОГУТ обеспечить необходимую вам функциональность, но я на самом деле ими не пользуюсь, поэтому я в этом тоже не уверен.
Кроме того, перемещение большого количества данных назад и вперед между системной памятью и видеопамятью (когда ваш объект хранится в видеопамяти) приводит к снижению производительности, поэтому вы не должны этого делать, даже если можете.
Если вы хотите получить состояние объекта после поворота, вам придется умножить его вручную - используя матрицу объекта и сохранить копию в системной памяти. Поскольку OpenGL объединяет матрицу объектов с матрицей представления (когда вы вызываете glRotatef), вам необходимо отдельно хранить матрицу вращения.
Это способ решить эту проблему?
Может быть, только если вы работаете с 2D и визуализируете один или два треугольника.
Обычно, когда вы выполняете преобразования, вы строите комбинированную матрицу вращения / перевода, а затем умножаете данные, которые вам нужны, используя эту матрицу - это будет более эффективно, поскольку позволяет объединять несколько преобразований в одно. И если вы работаете с неграфическими трехмерными процедурами (обнаружение столкновений), вы сами выполняете умножение матриц / векторное преобразование в своем коде.
AFAIK OpenGL не предоставляет подпрограмм манипулирования матрицей (аналогично D3DXMatrixMultiply в D3DX), но их легко писать с нуля, и их можно брать из разных мест. И вы можете использовать матричные функции D3DX, если вы в отчаянии (матрицы D3D имеют одинаковую структуру памяти). Кроме того, если вы серьезно относитесь к работе с 3D, вам в конечном итоге придется изучать матрицы.