あなたは物事を少し誤解しています。
glRotatefを呼び出しても、何も回転しませんでした。glRotateを呼び出すときは、変換行列を変更しますが、オブジェクトデータは変更されません。オブジェクトをレンダリングすると、頂点データは頂点処理パイプラインを通過し、変換行列が乗算され(オブジェクトをレンダリングするたびに)、技術的には、オブジェクトが変更されていないため、計算結果を取り戻すことはできません。
本当に必要な場合は、glフィードバックバッファー(glFeedbackBufferを参照)を使用してみることができますが、その理由はわかりません。「OpenGLレッドブック」にはフィードバックバッファの例があると思いますが、よくわかりません。フィードバックバッファは必要な機能を提供する場合がありますが、私は実際にはあまり使用していないので、それについてもよくわかりません。
また、システムメモリとビデオメモリの間で大量のデータを前後に移動すると(オブジェクトがビデオメモリに保存されている場合)、パフォーマンスが低下するため、可能であってもそうしないでください。
回転後にオブジェクトの状態を取得する場合は、オブジェクトの行列を使用して手動で乗算し、コピーをシステムメモリに保存する必要があります。OpenGLはオブジェクトマトリックスとビューマトリックスを組み合わせているため(glRotatefを呼び出す場合)、回転マトリックスを個別に保存する必要があります。
これはそれを解決する方法ですか?
たぶん、2Dで作業していて、1つまたは2つの三角形をレンダリングしている場合のみです。
通常、変換を行うときは、回転/平行移動の組み合わせマトリックスを作成し、そのマトリックスを使用して必要なデータを乗算します。これにより、複数の変換を1つに組み合わせることができるため、より効率的になります。また、非グラフィカル3Dルーチン(衝突検出)を使用する場合は、コードで行列の乗算/ベクトル変換を自分で行います。
AFAIK OpenGLは、マトリックス操作ルーチン(D3DXのD3DXMatrixMultiplyと同様)を提供していませんが、最初から作成するのは簡単で、複数の場所から取得できます。また、必要に応じて、D3DX行列関数を使用できます(D3D行列のメモリレイアウトは同じです)。さらに、3Dでの作業に真剣に取り組んでいる場合は、最終的に行列を学習する必要があります。