2012-07-03 35 views
1

我從來沒有真正發生過堆棧溢出錯誤,而且我也從未使用過顯示列表。 出於某種原因,它給我一個堆棧溢出錯誤。如果我通過將所有的多邊形放在顯示功能中來實現這個功能,它會運行(緩慢)但很好。 但是,一旦我添加了顯示列表,它立即進入堆棧溢出。導致堆棧溢出的顯示列表

這裏是列表中的功能:

// Floor. Blocks of 4x4 
static void hhfloor(void) { 


    hhobjects[0] = glGenLists(1); 

    glNewList(hhobjects[0],GL_COMPILE); 
    glColor4f(1,1,1,1); 

    double mul = 2.0/num; 
    int i, j; 
    float white[] = {1,1,1,1}; 
    float Emission[] = {0.0,0.0,0.01*emission,1.0}; 
    textures[0] = LoadTexBMP("textures/floor1.bmp"); 
    glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,shinyvec); 
    glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,white); 
    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,Emission); 
    glEnable(GL_TEXTURE_2D); 
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); 
    glBindTexture(GL_TEXTURE_2D,textures[0]); 
    glBegin(GL_QUADS); 
    glNormal3f(0,1,0); 
    for (i=0;i<num;i++) 
     for (j=0;j<num;j++) 
     { 
     glTexCoord2d(mul*(i+0),mul*(j+0));glVertex3d(2*mul*(i+0)-2,0,2*mul*(j+0)-2); 
     glTexCoord2d(mul*(i+1),mul*(j+0));glVertex3d(2*mul*(i+1)-2,0,2*mul*(j+0)-2); 
     glTexCoord2d(mul*(i+1),mul*(j+1));glVertex3d(2*mul*(i+1)-2,0,2*mul*(j+1)-2); 
     glTexCoord2d(mul*(i+0),mul*(j+1));glVertex3d(2*mul*(i+0)-2,0,2*mul*(j+1)-2); 
     } 
    glEnd(); 
    glDisable(GL_TEXTURE_2D); 
    glEndList(); 
} 

這裏是在顯示功能電話:

int a,b; 

float floorlist[16][3] = { 
{0,0,0},{0,0,-4},{0,0,-8},{0,0,-12},{0,0,-16}, 
{4,0,-8},{8,0,-8},{12,0,-8}, 
{8,0,0},{8,0,-4},{12,0,0},{12,0,-4}, 
{4,0,-16},{8,0,-16},{4,0,-20},{8,0,-20} }; 
glPushMatrix(); 
for(a=0;a<16;a++) { 
    glPushMatrix(); 
    glTranslated(floorlist[a][0],floorlist[a][1],floorlist[a][2]); 
    glCallList(hhobjects[0]); 
    glPopMatrix(); 
} 
+0

如果您想知道錯誤發生的位置,您應該在調試器中運行您的程序。 –

+0

另外,這對Stack Overflow問題來說太多了;請創建一個[更簡單的測試用例](http://sscce.org)。 –

+0

我有一個非常簡單的錯誤檢查,它絕對是顯示列表。另外,謝謝你,我會想辦法調低代碼。 –

回答

1

沒關係......我有一個額外的glPushMatrix()調用! 我以爲我檢查了所有這些,但我想我錯過了一個。