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

标签 c opengl glut

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

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

但是,当我在 glEnd() 之后放置 glpopM​​atrix() 时,我只会看到没有立方体的黑屏。

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/

相关文章:

c - 如何使浮点计算具有确定性?

java - 获取LWGL中的当前法线

c++ - 是否重用未定义的 glMapBufferRange 指针?

c - 如果我的编译器对函数指针的支持被破坏,我该如何编写一个调度程序?

c - 是否存在搜索 unix $PATH 变量并在某个文件存在时返回 true 的函数?

编译没有主要功能的C代码

无法在 glTexSubImage2D 中指定大小

c++ - 带键盘监听器的游戏循环

c++ - opengl中如何使用子窗口

c++ - 二维白色网格不显示在背景上方