Voilà le bout de code où est peut-être le pb :
/////////////////////////// MAIN.CPP /////////////////////////
 
UINT gamesession_textures[30];
 
 
 
///////////////////////////// GAMESESSION.CPP /////////////////////
 
void GameSession::init()  
{
 
 glEnable(GL_TEXTURE_2D);
 glShadeModel(GL_SMOOTH);
 glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
 glClearDepth(1.0f);
 glEnable(GL_DEPTH_TEST);
 glDepthFunc(GL_LEQUAL);
 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  
 
 glEnable(GL_LIGHT0);    
 glEnable(GL_LIGHTING);  
 glEnable(GL_COLOR_MATERIAL);    
 
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(45.0f, 4/3, 0.1f, 200.0f);
 
}
 
 
 
 
 
///////////////////////////// 3DS.H ///////////////////////////////////////////:
 
 void load_textures(t3DModel *pModel)
 {
 	// Go through all the materials
 	for(int i = 0; i < pModel->numOfMaterials; i++)
 	{
   // Check to see if there is a file name to load in this material
   if(strlen(pModel->pMaterials[i].strFile) > 0)
   {
   	CreateTexture(gamesession_textures, pModel->pMaterials[i].strFile, i);    
   }
   // Set the texture ID for this material
   pModel->pMaterials[i].texureId = i;
 
 	}
 
 	// Here, we turn on a lighting and enable lighting.  We don't need to
 	// set anything else for lighting because we will just take the defaults.
 	// We also want color, so we turn that on
 
 	glEnable(GL_LIGHT0);  	// Turn on a light with defaults set
 	glEnable(GL_LIGHTING);  // Turn on lighting
 	glEnable(GL_COLOR_MATERIAL);	// Allow color
 }
 
 
 
 
 
 
 
 void CreateTexture(UINT textureArray[], LPSTR strFileName, int textureID)
 {
 	char ouca [20];
 
 	AUX_RGBImageRec *pBitmap = NULL;
 	FILE *pFile = NULL;
 
 	if(!strFileName) return;
 
 	strcpy(ouca,"data/" );
 	strcat(ouca,strFileName);
 	pFile = fopen(ouca,"r" );
 
 	if(pFile)
 	{
   pBitmap = auxDIBImageLoad(ouca);
 	}
 	else
 	{
   MessageBox(NULL, "Couldn't find a texture!", "Error!", MB_OK);
   exit(0);
 	}
 
 	glGenTextures(1, &textureArray[textureID]);
 
 	glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
 
 	glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
 
 	gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pBitmap->sizeX, pBitmap->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pBitmap->data);
 
 	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
 	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);  
 
 	if (pBitmap)
 	{
   if (pBitmap->data)
   {
   	free(pBitmap->data);
   }
 
   free(pBitmap);
 	}
 }
 
 
 
 
 
 
 
 
 
void draw()
{
 int i;
 
 for( i = 0; i < theobject->numOfObjects; i++)
 {
 	if(theobject->pObject.size() <= 0) break;
 
 	t3DObject *pObject = &theobject->pObject[i];  
 	if(pObject->bHasTexture) {
   // Turn on texture mapping and turn off color
   glEnable(GL_TEXTURE_2D);
 
   // Reset the color to normal again
   glColor3ub(255, 255, 255);
 
   // Bind the texture map to the object by it's materialID
   glBindTexture(GL_TEXTURE_2D, gamesession_textures[pObject->materialID]);
 
 	} else {
 
   // Turn off texture mapping and turn on color
   glDisable(GL_TEXTURE_2D);
 
   // Reset the color to normal again
   glColor3ub(255, 255, 255);
 
 	}
 
 	// This determines if we are in wireframe or normal mode
 	glBegin(GL_TRIANGLES);  // Begin drawing with our selected mode (triangles or lines)
 
   // Go through all of the faces (polygons) of the object and draw them
   for(int j = 0; j < pObject->numOfFaces; j++)
   {
   	// Go through each corner of the triangle and draw it.
   	for(int whichVertex = 0; whichVertex < 3; whichVertex++)
   	{
     // Get the index for each point of the face
     int index = pObject->pFaces[j].vertIndex[whichVertex];
 
     // Give OpenGL the normal for this vertex.
     glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z);      
 
     // If the object has a texture associated with it, give it a texture coordinate.
     if(pObject->bHasTexture) {
 
     	// Make sure there was a UVW map applied to the object or else it won't have tex coords.
     	if(pObject->pTexVerts) {
       glTexCoord2f(pObject->pTexVerts[ index ].x, pObject->pTexVerts[ index ].y);
     	}
     } else {
 
     	// Make sure there is a valid material/color assigned to this object.
     	// You should always at least assign a material color to an object,  
     	// but just in case we want to check the size of the material list.
     	// if the size is at least one, then we have a valid material.
 
     	if(theobject->pMaterials.size() < pObject->materialID)  
 
     	{
       // Get and set the color that the object is, since it must not have a texture
       BYTE *pColor = theobject->pMaterials[pObject->materialID].color;
 
       // Assign the current color to this model
       glColor3ub(pColor[0], pColor[1], pColor[2]);
       }
     	}
     glVertex3f(pObject->pVerts[ index ].x , pObject->pVerts[ index ].y, pObject->pVerts[ index ].z);
   	}
   }
 
 	glEnd();  
 }
 
 
}
 
 
 
 
 
 
Voilà les bouts de code (très semblables  à ceux du tutorial ^^) ; a mon avis, dans la boucle de la  fonction  load_textures() il ne faudrait pas utiliser i comme index mais plutôt un indice général qui ne reviens pas  à 0 à chaque fois (j'ai essayé mais ça ne marche pas non plus 
 ). A noter que glGenTexture me renvoie 0 à chaque fois. J'ai essayé en n'utilisant pas cette fonction mais en mettant "à la main" un entier unique dans gamesession_textures mais ça ne marche pas non plus.  
 
Si mon objet à plusieurs matériaux, il faudrait que j'ajoute une variable dans la structure t3DObject qui indique où commencer à chercher les matériaux ? Mais comment savoir quelle texture utiliser à quel moment, si mon objet en à plusieurs ? Et comment savoir comment les "épingler" ?
 
Voilà, j'attends vos expliquations 
 !