This is a noble problem. I use OpenGL to loader 3ds file which is a helicopter model. And the texture images are also loading correctly. But some textures are displayed normally, some are disappeared. So is there any extra information about the relation between a face and its material? Any ideas will be appreciated. Hope to make myself clear.
Here is my rendering code:
tMaterial *mat;t3DObject *obj;int *index; for (int nOfObj=0; nOfObj<m_pModel->numOfObjects; nOfObj++){ obj = &m_pModel->pObject[nOfObj]; for (int nOfFace=0; nOfFace<obj->numOfFaces; nOfFace++) { index = obj->pFaces[nOfFace].vertIndex; mat = &m_pModel->pMaterials[obj->pFaces[nOfFace].matID]; if (mat->isTexMat) // If the corresponding face has texture { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, mat->texureId); glColor3ub(mat->color[0], mat->color[1], mat->color[2]); // Render the triangles glBegin(GL_TRIANGLES); glTexCoord2f(obj->pTexVerts[index[0]].x,obj->pTexVerts[index[0]].y); glNormal3f(obj->pNormals[index[0]].x,obj->pNormals[index[0]].y,obj->pNormals[index[0]].z); glVertex3f(obj->pVerts[index[0]].x, obj->pVerts[index[0]].y, obj->pVerts[index[0]].z); glTexCoord2f(obj->pTexVerts[index[1]].x,obj->pTexVerts[index[1]].y); glNormal3f(obj->pNormals[index[1]].x,obj->pNormals[index[1]].y,obj->pNormals[index[1]].z); glVertex3f(obj->pVerts[index[1]].x, obj->pVerts[index[1]].y, obj->pVerts[index[1]].z); glTexCoord2f(obj->pTexVerts[index[2]].x,obj->pTexVerts[index[2]].y); glNormal3f(obj->pNormals[index[2]].x,obj->pNormals[index[2]].y,obj->pNormals[index[2]].z); glVertex3f(obj->pVerts[index[2]].x, obj->pVerts[index[2]].y, obj->pVerts[index[2]].z); glEnd(); } else // Has no texture { glDisable(GL_TEXTURE_2D); glColor3ub(mat->color[0], mat->color[1], mat->color[2]); glBegin(GL_TRIANGLES); glNormal3f(obj->pNormals[index[0]].x,obj->pNormals[index[0]].y,obj->pNormals[index[0]].z); glVertex3f(obj->pVerts[index[0]].x, obj->pVerts[index[0]].y, obj->pVerts[index[0]].z); glNormal3f(obj->pNormals[index[1]].x,obj->pNormals[index[1]].y,obj->pNormals[index[1]].z); glVertex3f(obj->pVerts[index[1]].x, obj->pVerts[index[1]].y, obj->pVerts[index[1]].z); glNormal3f(obj->pNormals[index[2]].x,obj->pNormals[index[2]].y,obj->pNormals[index[2]].z); glVertex3f(obj->pVerts[index[2]].x, obj->pVerts[index[2]].y, obj->pVerts[index[2]].z); glEnd(); } }}
The pointer m_pModel is the helicopter model loaded from a .3ds file.