连续使用 glMatrixMode()?

Using glMatrixMode() in succession?

如何连续使用两种不同的矩阵模式?即,假设我想使用 glOrtho() 对投影矩阵进行一些操作。所以我调用glMatrixMode(GL_PROJECTION),然后执行操作。据我了解,使用 glPushMatrix() 会将这些更改应用于投影矩阵。现在我想对模型视图矩阵应用一些更改。我对如何正确执行此操作感到困惑。我是弹出矩阵然后调用 glMatrixMode 还是简单地继续 glMatrixMode?

glPushMatrixglPopMatrix是到store/restore当前选中的矩阵。它用于子网格(如机械臂),您需要 return 到根子网格的状态 ...

您所描述的就是 glMatrixMode 的用途。所以你的代码应该是这样的:

glMatrixMode(GL_PROJECTION);
// here your stuff for setting projection
glMatrixMode(GL_MODELVIEW);
// here your stuff for setting modelview

您应该在每个处理矩阵的代码块之前调用 glMatrixMode。不要指望当前矩阵设置为您将其设置为最后的东西。这会导致后来的混乱......例如,许多绘图算法会更改 运行 上的模型视图和/或纹理矩阵,并且在你的代码中你可以有这样的东西:

glMatrixMode(GL_MODELVIEW);
// here your stuff for setting modelview
glMatrixMode(GL_PROJECTION);
// here your stuff for setting projection

object1.draw();

// and here the current matrix could be changed from the object1.draw()
    glMatrixMode(GL_PROJECTION);    glPushMatrix(); glLoadIdentity();
    glOrtho(a, b, c,d,  e,f);// 
    glMatrixMode(GL_MODELVIEW);     glPushMatrix(); glLoadIdentity();


//----------
//----------

    glMatrixMode(GL_PROJECTION);    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);     glPopMatrix();
float mat_proj[16];
float mat_model[16];    

glGetFloatv(GL_PROJECTION_MATRIX,mat_proj );
glGetFloatv(GL_MODELVIEW_MATRIX ,mat_model);
glMatrixMode(GL_PROJECTION);glLoadIdentity();
glOrtho(a,b,c,d,e,f);
glMatrixMode(GL_MODELVIEW);glLoadIdentity(); 
//---------
//---------
glMatrixMode(GL_PROJECTION);   glLoadMatrixf(mat_proj);
glMatrixMode(GL_MODELVIEW);    glLoadMatrixf(mat_model);