I've started my game engine (in OpenGL + SDL), but when I call render::draw after loading a 3ds file, all I get is a black screen. (Everything else is set up right, because I can do simple stuff like drawing primitives) Here's the code, Thanks a bunch for any help.
Code:
char render::Load3DS (mesh * Mesh, char *p_filename)
{
int i;
FILE *l_file;
int temp;
unsigned short l_chunk_id;
unsigned int l_chunk_lenght;
unsigned char l_char;
unsigned short l_qty;
unsigned short l_face_flags;
if ((l_file=fopen (p_filename, "rb"))== NULL) return 0;
while (ftell (l_file) < filelength (fileno (l_file)))
{
fread (&l_chunk_id, 2, 1, l_file);
fread (&l_chunk_lenght, 4, 1, l_file);
switch (l_chunk_id)
{
case 0x4d4d:
break;
case 0x3d3d:
break;
case 0x4000:
i=0;
do
{
fread (&l_char, 1, 1, l_file);
// p_object->name[i]=l_char;
i++;
}while(l_char != '\0' && i<20);
break;
case 0x4100:
break;
case 0x4110:
fread (&l_qty, sizeof (unsigned short), 1, l_file);
Mesh->NVertices = l_qty;
Mesh->pVerts = new float * [l_qty];
for (temp = 0; temp < l_qty; temp++) {Mesh->pVerts[temp] = new float[3];}
for (i=0; i<l_qty; i++)
{
fread (&Mesh->pVerts[i][0], sizeof(float), 1, l_file);
fread (&Mesh->pVerts[i][1], sizeof(float), 1, l_file);
fread (&Mesh->pVerts[i][2], sizeof(float), 1, l_file);
}
break;
case 0x4120:
fread (&l_qty, sizeof (unsigned short), 1, l_file);
Mesh->NPolys = l_qty;
Mesh->pPolys = new unsigned short * [l_qty];
for (temp = 0; temp < l_qty; temp++) {Mesh->pPolys[temp] = new unsigned short[3];}
for (i=0; i<l_qty; i++)
{
fread (&Mesh->pPolys[i][0], sizeof (unsigned short), 1, l_file);
fread (&Mesh->pPolys[i][1], sizeof (unsigned short), 1, l_file);
fread (&Mesh->pPolys[i][2], sizeof (unsigned short), 1, l_file);
fread (&l_face_flags, sizeof (unsigned short), 1, l_file);
}
break;
default:
fseek(l_file, l_chunk_lenght-6, SEEK_CUR);
}
}
fclose (l_file);
return (1);
}
Code:
void render::Draw()
{
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0,0.0,-300);
glBegin(GL_TRIANGLES);
for (int l_index=0;l_index<Engine.jug.NPolys;l_index++)
{
glColor3b(127, 0, 127);
glVertex3f( Engine.jug.pVerts[ Engine.jug.pPolys[l_index][0] ][0],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][0] ][1],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][0] ][2]);
glColor3b(127, 0, 127);
glVertex3f( Engine.jug.pVerts[ Engine.jug.pPolys[l_index][1] ][0],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][1] ][1],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][1] ][2]);
glColor3b(127, 0, 127);
glVertex3f( Engine.jug.pVerts[ Engine.jug.pPolys[l_index][2] ][0],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][2] ][1],
Engine.jug.pVerts[ Engine.jug.pPolys[l_index][2] ][2]);
}
glEnd();
SDL_GL_SwapBuffers();
}
oh, and the mesh decleration
Code:
struct mesh
{
float ** pVerts;
unsigned short ** pPolys;
unsigned short NVertices;
unsigned short NPolys;
};