仅当我在 glEnd 之后调用 glPopMatrix 时才会显示立方体(而不是相反)

Cube only displays if I call glPopMatrix after glEnd (not the other way around)

我在 OpenGl 中遇到了一个非常奇怪的问题。以下代码按预期生成黄色立方体

glPushMatrix();
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (GLfloat[]){ 1, 1, 0, 1 });
glBegin(GL_LINE_LOOP);
glutSolidCube(1);
glPopMatrix();
glEnd();

然而,当我将 glpopM​​atrix() 放在 glEnd() 之后时,我只得到一个没有立方体的黑屏。

glPushMatrix();
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (GLfloat[]){ 1, 1, 0, 1 });
glBegin(GL_LINE_LOOP);
glutSolidCube(1);
glEnd();
glPopMatrix();

对我来说,第二种方法更有意义(推、开始、结束然后弹出),我真的不知道为什么它不起作用。感谢任何帮助,谢谢!

问题不在于 glPopMatrix() 调用的位置。问题出在 glBegin()glEnd() 上。删除它们,glutSolidCube() 已经这样做了。

如果您使用的是 FreeGLUT,那么 glutSolidCube() 甚至不会使用 glBegin()glEnd(),而是会在后台使用顶点数组。所以简而言之,您可能只是混淆了您的驱动程序,这就是您得到奇怪结果的原因。