3ds模型不能正常贴图

cytlyy 2011-05-03 09:53:48

-(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模型的绘制代码,目前能绘制出模型,如果模型是有颜色组成没有贴图能正常绘制出来,如果模型有贴图就只能绘制出一个白色的模型,贴图贴不上去。请各位大大帮忙看看,这是为什么呢?
...全文
221 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylovetop 2011-05-11
  • 打赏
  • 举报
回复
大哥 能介绍下ios里 3d开发用的什么东东吗

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧