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();
}
오류가 발생한 위치를 알고 싶으면 프로그램을 디버거에서 실행해야합니다. –
또한 스택 오버플로 질문에 대한 코드가 너무 많습니다. 많은 [간단한 테스트 케이스] (http://sscce.org)를 만드십시오. –
나는 아주 간단한 오류 검사를하고 있으며 그것은 분명히 표시 목록입니다. 또한 고맙습니다. 코드를 낮추는 방법을 생각해 보겠습니다. –