3ds模型不能正常贴图
-(void)display
{
static GLfloat lightPosition[4] = { 20.0, 20.0, 21};
static GLfloat lightDefuse[4] = { 1.0, 1, 1, 1.0};
static GLfloat lightAmbient[4] = { 1.0, 1.0, 1.0, 1.0};
//NSLog(@"__display");
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//绘制3d模型
glEnable( GL_LIGHTING);
glEnable( GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
//粗糙反射
glLightfv( GL_LIGHT0, GL_DIFFUSE, lightDefuse);
//多次反射
glLightfv( GL_LIGHT0, GL_AMBIENT, lightAmbient);
glLightf( GL_LIGHT0, GL_SPOT_EXPONENT, 68);
glLightfv( GL_LIGHT0, GL_POSITION, lightPosition);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef( 0, -0, -5);
glRotatef(g_RotateX, 0, 1.0f, 0);
g_RotateX -= 5;
for(int i = 0; i < g_3DModel.numOfObjects; i++)
{
if(g_3DModel.pObject.size() <= 0) break;
t3DObject *pObject = &g_3DModel.pObject[i];
if(pObject->bHasTexture) {
glEnable( GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex.name);
} else {
glDisable(GL_TEXTURE_2D);
glColor4f(1, 1, 1, 1);
}
for(int j = 0; j <pObject->numOfFaces; j++)
{
glPushMatrix();
GLfloat normalV[9] = {0};
GLfloat vertex[9] = {0};
GLfloat texcoord[6] = {0};
GLfloat color[12] = {0};
for(int whichVertex = 0; whichVertex < 3; whichVertex++)
{
int index = pObject->pFaces[j].vertIndex[whichVertex];
normalV[whichVertex*3] = pObject->pNormals[ index ].x;
normalV[whichVertex*3+1] = pObject->pNormals[ index ].y;
normalV[whichVertex*3+2] = pObject->pNormals[ index ].z;
if(pObject->bHasTexture) {
if(pObject->pTexVerts) {
texcoord[(whichVertex)*2] = pObject->pTexVerts[ index ].x;
texcoord[(whichVertex)*2+1] = pObject->pTexVerts[ index ].y;
}
} else {
if(g_3DModel.pMaterials.size() && pObject->materialID >= 0)
{
GLubyte *pColor = g_3DModel.pMaterials[pObject->materialID].color;
color[whichVertex*4] = pColor[0]/(float)255;
color[whichVertex*4+1] = pColor[1]/(float)255;
color[whichVertex*4+2] = pColor[2]/(float)255;
color[whichVertex*4+3] = 1;
}
}
vertex[whichVertex*3] = pObject->pVerts[ index ].x;
vertex[whichVertex*3+1] = pObject->pVerts[ index ].y;
vertex[whichVertex*3+2] = pObject->pVerts[ index ].z;
}
if(pObject->bHasTexture) {
if(pObject->pTexVerts) {
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer ( 2, GL_FLOAT, 0, texcoord);
}
} else {
if(g_3DModel.pMaterials.size() && pObject->materialID >= 0)
{
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, color);
}
}
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glBindTexture(GL_TEXTURE_2D,tex.name);
glTexCoordPointer(2, GL_FLOAT, 0,texcoord);
glVertexPointer (3, GL_FLOAT, 0, vertex);
//glColor4f(0.9, 0.5, 0.5, 1);
glScalef(0.5,0.5, 0.5);
glNormalPointer(GL_FLOAT, 0, normalV);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
if(pObject->bHasTexture) {
if(pObject->pTexVerts) {
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
} else {
if(g_3DModel.pMaterials.size() && pObject->materialID >= 0)
{
glDisableClientState(GL_COLOR_ARRAY);
}
}
if(pObject->bHasTexture){
glDisable(GL_TEXTURE_2D);
}
glPopMatrix();
}
}
NSLog(@"________________exit");
glDisable( GL_LIGHT0);
glDisable( GL_LIGHTING);
[self drawView];
}
这个是我绘制3ds模型的绘制代码,目前能绘制出模型,如果模型是有颜色组成没有贴图能正常绘制出来,如果模型有贴图就只能绘制出一个白色的模型,贴图贴不上去。请各位大大帮忙看看,这是为什么呢?