你对事情有点误解了。
你没有通过调用 glRotatef 来旋转任何东西。当您调用 glRotate 时,您修改了变换矩阵,对象数据保持不变。当您渲染对象时,顶点数据通过顶点处理管道,乘以变换矩阵(每次渲染对象),从技术上讲,您无法获得计算结果 - 因为对象没有改变。
好吧,如果您真的想要它,您可以尝试使用 gl 反馈缓冲区(请参阅 glFeedbackBuffer),但我看不出有什么原因。我认为“OpenGL 红皮书”可能有反馈缓冲区示例,但我不确定。反馈缓冲区可能会提供您需要的功能,但我真的没有使用太多,所以我也不确定。
此外,在系统内存和视频内存之间来回移动大量数据(当您的对象存储在视频内存中时)会导致性能损失,因此即使可以,也不应该这样做。
如果要在旋转后获取对象状态,则必须手动将其相乘 - 使用对象的矩阵并将副本存储在系统内存中。由于 OpenGL 结合了对象矩阵和视图矩阵(当您调用 glRotatef 时),所以您需要单独存储旋转矩阵。
这是解决它的方法吗?
也许只有当您使用 2D 并渲染一两个三角形时。
通常,当您进行转换时,您会构建组合的旋转/平移矩阵,然后使用该矩阵将所需的数据相乘 - 这将更有效,因为它允许将多个转换组合为一个。如果您使用非图形 3D 例程(碰撞检测),您可以自己在代码中进行矩阵乘法/向量转换。
AFAIK OpenGL 不提供矩阵操作例程(类似于 D3DX 中的 D3DXMatrixMultiply),但它们很容易从头开始编写,并且可以从多个地方获取。如果你很绝望,你可以使用 D3DX 矩阵函数(D3D 矩阵具有相同的内存布局)。此外,如果您认真对待 3D,您最终将不得不学习矩阵。