   problem with broken fragment improperly rendering
  i am currently using lib3ds library loading a vehicle model from 3ds file after i draw in on the screen it appears that there r a lot of broken fragment and cannot be rendered properly.it seems that there r some far points draw onto a nearer surface but i`ve no idea what `s the problem really any answer would be appreciated.#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <lib3ds.h>#include <iostream>typedef float Lib3dsVector[3];typedef float Lib3dsTexel[2];using namespace std;Lib3dsFile* model;Lib3dsMesh** mesh;Lib3dsCamera** camera;Lib3dsFace* face;Lib3dsLight** light;Lib3dsMaterial** material;unsigned long total_face;void lightup(){glShadeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE);glFrontFace(GL_CCW);glCullFace(GL_BACK);float gambient[]={0.2,0.2,0.2,1.0};float lightpos[]={1.0,1.0,1.0,0.0};float lambient[]={0.8,0.8,0.8,1.0};float ldiffuse[]={1.0,1.0,1.0,1.0};float lspecular[]={0.3,0.3,0.3,1.0};glClearColor(0.0,0.0,0.0,0.0);glLightfv(GL_LIGHT0,GL_DIFFUSE,ldiffuse);glLightfv(GL_LIGHT0,GL_AMBIENT,lambient);glLightfv(GL_LIGHT0,GL_SPECULAR,lspecular);glLightfv(GL_LIGHT0,GL_POSITION,lightpos);glLightModelfv(GL_LIGHT_MODEL_AMBIENT,gambient);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);}void display(){glEnable(GL_DEPTH_TEST);glClearDepth(1.0);glDepthFunc(GL_LEQUAL);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity(); gluLookAt(camera[0]->position[0]+1000,camera[0]->position[1],camera[0]->position[2],camera[0]->target[0],camera[0]->target[1],camera[0]->target[2],0.0,0.0,1.0);glColor3f(1.0,0.0,0.0);glPushMatrix();lightup();glTranslatef(0.0,0.0,-1000.0);long meshcount;for(meshcount=0;meshcount<model->nmeshes;meshcount++){face=mesh[meshcount]->faces;Lib3dsVector* vertex_normal=new Lib3dsVector[mesh[meshcount]->nfaces*3];Lib3dsVector* face_normal=new Lib3dsVector[mesh[meshcount]->nfaces];lib3ds_mesh_calculate_vertex_normals(mesh[meshcount],vertex_normal);lib3ds_mesh_calculate_face_normals(mesh[meshcount],face_normal);for(long i=0;i<mesh[meshcount]->nfaces;i++){glMaterialfv(GL_FRONT,GL_DIFFUSE,material[face.material]->diffuse);glMaterialfv(GL_FRONT,GL_AMBIENT,material[face.material]->ambient);glMaterialfv(GL_FRONT,GL_SPECULAR,material[face.material]->specular);glBegin(GL_TRIANGLES);glNormal3fv(face_normal);glNormal3fv(vertex_normal[i*3]);glVertex3fv(mesh[meshcount]->vertices[face.index[0]]);glNormal3fv(vertex_normal[i*3+1]);glVertex3fv(mesh[meshcount]->vertices[face.index[1]]);glNormal3fv(vertex_normal[i*3+2]);glVertex3fv(mesh[meshcount]->vertices[face.index[2]]);glEnd();}}glPopMatrix();/*glPushMatrix();glTranslatef(0.0,0.0,-2000.0);glColor3f(1.0,1.0,1.0);glBegin(GL_QUADS);glVertex3f(-10000.0f,-10000.0f,0.0f);glVertex3f(10000.0f,-10000.0f,0.0f);glVertex3f(10000.0f,10000.0f,0.0f);glVertex3f(-10000.0f,10000.0f,0.0f);glEnd();glPopMatrix();*/glutSwapBuffers();}void keypress(unsigned char key,int x,int y){switch(key){case 27:exit(0);break;}}void reshape(int w,int h){if(h==0) h=1;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0,w/h,0.0,5.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}int main(int argc,char* argv[]){glutInit(&argc,argv);model=lib3ds_file_open("vehicle.3DS");if(model==NULL) cout<<"Error"<<endl; else cout<<model->nmaterials<<endl;mesh=model->meshes;material=model->materials;camera=model->cameras;light=model->lights;cout<<"Light Num:"<<model->nlights<<endl;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BITS);glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);glutInitWindowSize(800,800);glutInitWindowPosition(100,100);glutCreateWindow("VC 2008 Glut");//glutFullScreen();glShadeModel(GL_FLAT);glutKeyboardFunc(keypress);glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;}
  the only problem i could see is that the znear and zfar has been set to odd values, at least compared to the rest of the values you use.[font="Arial"]zfar is at 5.0f while still you pull the camera back by 1000.0f, im not sure it's the problem, but it could cause problems, so try setting znear/zfar in gluPerspective to 0.1f/1000.0f and adjust the camera if needed.   ;  glBegin(GL_TRIANGLES);  glNormal3fv(face_normal);  glNormal3fv(vertex_normal[i*3]);  glVertex3fv(mesh[meshcount]->vertices[face.index[0]]);  glNormal3fv(vertex_normal[i*3+1]);  glVertex3fv(mesh[meshcount]->vertices[face.index[1]]);  glNormal3fv(vertex_normal[i*3+2]);  glVertex3fv(mesh[meshcount]->vertices[face.index[2]]);  glEnd();}Probably shouldn't put glBegin and glEnd inside of the for loop because that is a fairly big performance hit. Better yet, don't use glBegin or glEnd at all.Have you tried using GL_TRIANGLE_STRIP instead of just GL_TRIANGLES?   