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

时间:2015-01-15 07:59:35

标签: c++ opengl

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

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

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

为什么,天啊,你会这样做吗?

我一直在试图理解四元数,欧拉或轴旋转。这些概念并不困难,但即使在查看示例*编辑后,我也一直遇到数学问题[我发现的大多数开放课程对于简单用户来说都没有详细记录,或者对移动有限制。)

我决定找个骗人的方法。

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

1 个答案:

答案 0 :(得分:1)

我的建议:根本不打扰 glRotate ,他们从来没有非常愉快地工作过,没有严肃的程序确实使用过它们。

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

使用现有的矩阵数学库,如 GLM Eigen linmath.h 来构建转换矩阵。好处是,您可以随时制作矩阵的副本,因此您不需要摆弄 glLoadIdentity glPushMatrix glPopMatrix 在需要的地方制作副本并从中进行操作。

BTW:OpenGL中没有“模型”这样的东西。这不是OpenGL的工作原理。 OpenGL一次一个地绘制点,线或三角形,其中每个这样称为基元的单独变换到(屏幕)帧缓冲区上的位置并变成像素。一旦处理了一个原语,OpenGL就已经忘记了它。