создание кубов с циклом for в opengl

Я пытаюсь создать кубы в OpenGL / glut, используя цикл for, но пока я получаю только переполнение.

Вот код для создания куба с текстурами:

void Cubes1Class::render()
{
for (int face = 0; face < 6; face++)
{
if (face < 1)
{
glBindTexture(GL_TEXTURE_2D, texHandle[1]);
glBegin(GL_QUADS);
for (int vert = 0; vert <= 4; vert++)
{
glVertex3fv(VertsZ[FacesZ[face][vert]]);
glTexCoord2f(TexZ[vert][0], TexZ[vert][1]);
}
}
else
{
glBindTexture(GL_TEXTURE_2D, texHandle[0]);
glBegin(GL_QUADS);
for (int vert = 0; vert <= 4; vert++)
{
glVertex3fv(VertsZ[FacesZ[face][vert]]);
glTexCoord2f(TexZ[vert][0], TexZ[vert][1]);
}
}
glEnd();
}
}

и здесь я пытаюсь сделать это с помощью цикла for:

CubesClass::CubesClass(int num)   // constructor
{
numOfCubes = 3;
for (int i=0; i<numOfCubes; i++)
{
lst[i]=new Cubes1Class();
}
}

void CubesClass::render()
{
int x = 0;
numOfCubes = 3;

for (x = 0; x < numOfCubes; x++)
{
glPushMatrix();
glTranslatef(0.0, x, 0.0);
lst[x]->render();
glPopMatrix();
}
}

Я не могу понять, где я ошибся.

Любая идея?

РЕДАКТИРОВАТЬ:

Кубы рендерится нормально без цикла for, если я просто рендеринг, затем перевод, рендеринг, затем перевод и т.д.
Это массивы:

static GLfloat VertsZ[8][3] = {
{ -0.5,  0.5, -0.5 }, /* 0 left top rear */
{  0.5,  0.5, -0.5 }, /* 1 right top rear */
{  0.5, -0.5, -0.5 }, /* 2 right bottom rear */
{ -0.5, -0.5, -0.5 }, /* 3 left bottom rear */
{ -0.5,  0.5,  0.5 }, /* 4 left top front */
{  0.5,  0.5,  0.5 }, /* 5 right top front */
{  0.5, -0.5,  0.5 }, /* 6 right bottom front */
{ -0.5, -0.5,  0.5 }  /* 7 left bottom front */
};

static GLuint FacesZ[6][4] = {
7, 6, 5, 4,   /* front */
6, 2, 1, 5,   /* right */
3, 7, 4, 0,   /* left */
5, 1, 0, 4,   /* top */
7, 6, 2, 3,   /* bottom */
2, 3, 0, 1    /* rear */
};

static GLfloat TexZ[4][2] = {
0.0, 0.0,
0.0, 1.0,
1.0, 1.0,
1.0, 0.0
};

cubes1Class пуст в настоящее время

-1

Решение

Это работает сейчас, не уверен, почему это просто не
извините, если я потратил время впустую: /

вот код конца:

#include "Cubes.h"#include "bitmap.h"
static GLfloat VertsZ[8][3] = {
{ -0.5,  0.5, -0.5 }, /* 0 left top rear */
{  0.5,  0.5, -0.5 },   /* 1 right top rear */
{  0.5, -0.5, -0.5 },   /* 2 right bottom rear */
{ -0.5, -0.5, -0.5 },   /* 3 left bottom rear */
{ -0.5,  0.5,  0.5 },   /* 4 left top front */
{  0.5,  0.5,  0.5 },   /* 5 right top front */
{  0.5, -0.5,  0.5 },   /* 6 right bottom front */
{ -0.5, -0.5,  0.5 }    /* 7 left bottom front */
};

static GLuint FacesZ[6][4] = {
7, 6, 5, 4, /* front */
6, 2, 1, 5, /* right */
3, 7, 4, 0, /* left */
5, 1, 0, 4, /* top */
7, 6, 2, 3, /* bottom */
2, 3, 0, 1  /* rear */
};

static GLfloat NormalsZ[6][3] = {
0, 0, 1,    /* front */
1, 0, 0,    /* right */
-1, 0, 0,   /* left */
0, 1, 0,    /* top */
0, -1, 0, /* bottom */
0, 0, -1   /* rear */
};

static GLfloat TexZ[4][2] = {
{0.0, 0.0 },
{0.0, 1.0 },
{1.0, 1.0 },
{1.0, 0.0 }
};

static CBitmap *bmp0; // the texture
static CBitmap *bmp1; // the texture
static GLuint texHandle[2]; // the open gl texture handle

void readTextureFile()
{
bmp0= new CBitmap("metal.bmp");
printf("bmp size %d %d\n",bmp0->GetWidth(),bmp0->GetHeight());

bmp1= new CBitmap("starTexture3.bmp");
printf("bmp size %d %d\n",bmp1->GetWidth(),bmp1->GetHeight());

glGenTextures(2, &texHandle[0]);

// Texture handle will be bound to the BMP bitmap data just
// as it was read in...
glBindTexture(GL_TEXTURE_2D, texHandle[0]);
glTexImage2D(GL_TEXTURE_2D,
0,                              // Mipmap level 0
3,                              // 3 bytes [R,G,B] per pixel
bmp0->GetWidth(),   // width of bitmap
bmp0->GetHeight(),  // height of bitmap
0,                              // no border pixels
GL_RGBA,                     // bitmap pixel format
GL_UNSIGNED_BYTE,               // format for GL to store it
bmp0->GetBits()               // pointer to the pixel data
);

glBindTexture(GL_TEXTURE_2D, texHandle[1]);
glTexImage2D(GL_TEXTURE_2D,
0,                              // Mipmap level 0
3,                              // 3 bytes [R,G,B] per pixel
bmp1->GetWidth(),   // width of bitmap
bmp1->GetHeight(),  // height of bitmap
0,                              // no border pixels
GL_RGBA,                     // bitmap pixel format
GL_UNSIGNED_BYTE,               // format for GL to store it
bmp1->GetBits()               // pointer to the pixel data
);

}
// ------------------------- Cubes1Class -----------------------------

Cubes1Class::Cubes1Class() // constructor
{

}

void Cubes1Class::render()
{
for (int face = 0; face < 6; face++)
{
if (face < 1)
{
glBindTexture(GL_TEXTURE_2D, texHandle[1]);
glBegin(GL_QUADS);
for (int vert = 0; vert <= 4; vert++)
{
glTexCoord2f(TexZ[vert][0], TexZ[vert][1]);
glVertex3fv(VertsZ[FacesZ[face][vert]]);
}
}
else
{
glBindTexture(GL_TEXTURE_2D, texHandle[0]);
glBegin(GL_QUADS);
for (int vert = 0; vert <= 4; vert++)
{
glTexCoord2f(TexZ[vert][0], TexZ[vert][1]);
glVertex3fv(VertsZ[FacesZ[face][vert]]);
}
}
glEnd();}
}

// ------------------------- CubesClass -----------------------------

//Cubes1Class *lst[MAX_NUM_CUBES]; // the cubes
//GLfloat angle[MAX_NUM_CUBES]; // the cubes rotations

CubesClass::CubesClass(int num)   // constructor
{
numOfCubes = 4;
for (int i=0; i<numOfCubes; i++)
{
lst[i]=new Cubes1Class();
}
}

void CubesClass::render()  // draw it
{
for (int i=0; i<numOfCubes; i++)
{
glPushMatrix();
glTranslatef(0.0, i, 0.0);

lst[i]->render();
glPopMatrix();
}
}
0

Другие решения

Других решений пока нет …