我在 OpenGl 中遇到了一个非常奇怪的问题。以下代码按预期生成黄色立方体
glPushMatrix();
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (GLfloat[]){ 1, 1, 0, 1 });
glBegin(GL_LINE_LOOP);
glutSolidCube(1);
glPopMatrix();
glEnd();
但是,当我在 glEnd() 之后放置 glpopMatrix() 时,我只会看到没有立方体的黑屏。
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()
,并且会在引擎盖下使用顶点数组。所以简而言之,您可能只是混淆了您的驱动程序,这就是您得到奇怪结果的原因。
关于仅当我在 glEnd 之后调用 glPopMatrix 时才会显示立方体(而不是相反),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012362/