Opengl glPushMatrix内部显示列表复制模型

Opengl glPushMatrix内部显示列表复制模型,opengl,displaylist,Opengl,Displaylist,我有一些立方体的显示列表。。。非常简单的东西。下面是一个片段: GL11.glPushMatrix GL11.glRotatef(90,0,0,1) cuboid(1,0.5,20) //just glVertex calls GL11.glPopMatrix 如果我用这个在即时模式下画图,没有什么奇怪的事情发生。但是,如果我把它放在一个显示列表中,它将首先绘制未旋转的长方体,然后旋转(或者在glPushMatrix和GLPOPMARRIX之间进行任何转换)。此外,如果我不使用glPush和g

我有一些立方体的显示列表。。。非常简单的东西。下面是一个片段:

GL11.glPushMatrix
GL11.glRotatef(90,0,0,1)
cuboid(1,0.5,20) //just glVertex calls
GL11.glPopMatrix
如果我用这个在即时模式下画图,没有什么奇怪的事情发生。但是,如果我把它放在一个显示列表中,它将首先绘制未旋转的长方体,然后旋转(或者在glPushMatrix和GLPOPMARRIX之间进行任何转换)。此外,如果我不使用glPush和glPop,它的行为将与预期的一样

在显示列表中使用glPush/PopMatrix时,我需要知道什么吗

编辑:添加更多源代码:

handle = GL11.glGenLists(1);
GL11.glNewList(handle,GL11.GL_COMPILE)
GL11.glBegin(GL11.GL_LINES);

GL11.glPushMatrix //if I don't use these it behaves as expected
GL11.glRotatef(90,0,0,1)
cuboid(1,0.5,20) //just glVertex calls
GL11.glPopMatrix

GL11.glEnd();
GL11.glEndList();
EDIT2:我用glPushMatrix替换了glBegin,用glPopMatrix替换了GLAND——我不喜欢它现在的样子,但至少它能工作。据我所知,这是不正常的,我所做的只是一个把戏,所以我把问题留给大家

GL11.glPushMatrix //everytime I want to push/pop I have to call glBegin and glEnd
GL11.glBegin(GL11.GL_LINES);
GL11.glRotatef(90,0,0,1)
cuboid(1,0.5,20) //just glVertex calls
GL11.glEnd();
GL11.glPopMatrix

在glBegin/glEnd中调用glPushMatrix是错误的。在glBegin/glEnd对中只能使用严格的命令子集

从glBegin手册页:

glBegin和glEnd之间只能使用GL命令的一个子集。 命令是 glVertex, glColor, 第二种颜色, 格林德斯, glNormal, 格尔福格德, glTexCoord, 这是一种防御, glVertexAttrib, 格瓦库德, 格莱瓦点, glArrayElement, 材料,以及 格雷奇旗。 而且 这是可以接受的使用 glCallList或 要执行的调用列表 显示仅包含前面命令的列表。 如果在glBegin和glEnd之间执行任何其他GL命令, 将设置错误标志并忽略该命令

在glPushMatrix的手册页上:

如果glPushMatrix或GLPOPMARRIX 在执行glBegin之间执行 以及格伦德的相应执行

开始在开发代码中加入glGetError,它会向您指出这些问题

此外,glRotatef在以下情况下也不合法:

如果GLU旋转,则生成无效的GLU操作 在执行glBegin之间执行 以及格伦德的相应执行


在glBegin/glEnd中调用glPushMatrix是错误的。在glBegin/glEnd对中只能使用严格的命令子集

从glBegin手册页:

glBegin和glEnd之间只能使用GL命令的一个子集。 命令是 glVertex, glColor, 第二种颜色, 格林德斯, glNormal, 格尔福格德, glTexCoord, 这是一种防御, glVertexAttrib, 格瓦库德, 格莱瓦点, glArrayElement, 材料,以及 格雷奇旗。 而且 这是可以接受的使用 glCallList或 要执行的调用列表 显示仅包含前面命令的列表。 如果在glBegin和glEnd之间执行任何其他GL命令, 将设置错误标志并忽略该命令

在glPushMatrix的手册页上:

如果glPushMatrix或GLPOPMARRIX 在执行glBegin之间执行 以及格伦德的相应执行

开始在开发代码中加入glGetError,它会向您指出这些问题

此外,glRotatef在以下情况下也不合法:

如果GLU旋转,则生成无效的GLU操作 在执行glBegin之间执行 以及格伦德的相应执行