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); }oh, and the mesh declerationCode: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(); }
Code:struct mesh { float ** pVerts; unsigned short ** pPolys; unsigned short NVertices; unsigned short NPolys; };



LinkBack URL
About LinkBacks



[/EDIT]