如何访问转换后的 openegl 模型视图矩阵 [尝试过 glGetFloatv()]?

How do I access a transformed openegl modelview matrix [tried glGetFloatv()]?

我正在尝试在 'x' 轴上旋转并保存转换后的矩阵,以便以后可以使用它进一步旋转;或从已经旋转的角度看另一个轴。

    //rotate
    glRotatef(yROT,model[0],model[4],model[8]);//front over right axis
        //save model
    glGetFloatv(GL_MODELVIEW_MATRIX, model);

不幸的是,我注意到 openGL 必须缓冲转换,因为单位矩阵已加载到模型中。有解决方法吗?

天哪,你为什么要这样做?

我一直在尝试理解四元数、欧拉或轴旋转。这些概念并不难,但即使在查看示例 *edit[和我发现的大多数开放 类 之后,我在数学上也遇到了麻烦,或者对于傻瓜用户没有很好的记录,或者对移动有限制]。

我决定想办法作弊。

编辑* 'further later' 我的意思是在下一个代码循环中。换句话说,yRot 是我希望我的视图从保存的角度旋转的度数。

我的建议:根本不要为 glRotate 操心,它们从一开始就不是很令人愉快,也没有严肃的程序使用过它们。

如果您想使用固定功能管道(= 无着色器),请使用 glLoadMatrix 加载您当前需要的任何转换。对于着色器,无论如何,您必须在概念上与 glUniform 相同。

使用现有的矩阵数学库,例如 GLMEigenlinmath.h 构造变换矩阵。好处是,您可以随时复制矩阵,而不是摆弄 glLoadIdentityglPushMatrixglPopMatrix 你只需在需要的地方制作副本并从中开始工作。

顺便说一句:在 OpenGL 中没有 "models" 这样的东西。这不是 OpenGL 的工作方式。 OpenGL 一次绘制一个点、线或三角形,其中每个称为 primitive 的元素都被单独转换到(屏幕)帧缓冲区上的一个位置并转换为像素。处理图元后,OpenGL 已经忘记了它。