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();
}
如果您想知道錯誤發生的位置,您應該在調試器中運行您的程序。 –
另外,這對Stack Overflow問題來說太多了;請創建一個[更簡單的測試用例](http://sscce.org)。 –
我有一個非常簡單的錯誤檢查,它絕對是顯示列表。另外,謝謝你,我會想辦法調低代碼。 –