hola a todos,
estoy cargando un modelo a partir de un fichero .3ds, cargo los colores del material y la trasparencia (y el shininess, y todo eso), y luego se los aplico. El problema que tengo es que la trasparencia parece que funciona, al menos le da un aspecto como traslucido al objeto, pero no va bien del todo, no se ve nada de lo que hay detras, solo un poco la parte de atras del mismo objeto. Pongo una captura:

Lo de arriba es el modelo como es. Lo de abajo es lo que veo cuando cargo yo el modelo. A parte de los colores que se van diferentes por las luces y todo eso, al menos si lo estuviera haciendo bien se veria algo de la pelota.
El codigo donde hago esto lo pongo abajo, mas o menos se ve en que orden llamo a las funciones de opengl y eso. Pongo las luces, calculo el material y le doy los vertices del trianglo y sus normales.
Antes de usar materiales usaba la funcion gColor4f y entonces si que se hacia bien la trasparencia, se veia lo de tras y eso.
Sabeis por que puede ser esto?
Un saludo y muchas gracias.
estoy cargando un modelo a partir de un fichero .3ds, cargo los colores del material y la trasparencia (y el shininess, y todo eso), y luego se los aplico. El problema que tengo es que la trasparencia parece que funciona, al menos le da un aspecto como traslucido al objeto, pero no va bien del todo, no se ve nada de lo que hay detras, solo un poco la parte de atras del mismo objeto. Pongo una captura:

Lo de arriba es el modelo como es. Lo de abajo es lo que veo cuando cargo yo el modelo. A parte de los colores que se van diferentes por las luces y todo eso, al menos si lo estuviera haciendo bien se veria algo de la pelota.
El codigo donde hago esto lo pongo abajo, mas o menos se ve en que orden llamo a las funciones de opengl y eso. Pongo las luces, calculo el material y le doy los vertices del trianglo y sus normales.
Antes de usar materiales usaba la funcion gColor4f y entonces si que se hacia bien la trasparencia, se veia lo de tras y eso.
Sabeis por que puede ser esto?
Un saludo y muchas gracias.
Código [Seleccionar]
glLightfv (GL_LIGHT0, GL_AMBIENT, Light->ambient);
glLightfv (GL_LIGHT0, GL_DIFFUSE, Light->diffuse);
glLightfv (GL_LIGHT0, GL_SPECULAR, Light->specular);
glLightfv (GL_LIGHT0, GL_POSITION, TempLightPos);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
for (i=0;i<Obj->nObjectTriangles;i++)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Camera->VertexFromCamera(&Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].a],&CameraVertexa);
Camera->VertexFromCamera(&Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].b],&CameraVertexb);
Camera->VertexFromCamera(&Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].c],&CameraVertexc);
float mat_ambient[]=
{((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->AmbientColorRgba.r)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->AmbientColorRgba.g)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->AmbientColorRgba.b)/0xff,
((float)(100-((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->Transparency)))/100};
float mat_diffuse[]=
{((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->DiffuseColorRgba.r)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->DiffuseColorRgba.g)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->DiffuseColorRgba.b)/0xff,
((float)(100-((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->Transparency)))/100};
float mat_specular[]=
{((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SpecularColorRgba.r)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SpecularColorRgba.g)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SpecularColorRgba.b)/0xff,
((float)(100-((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->Transparency)))/100};
float mat_selfillum[]=
{((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SelfIllumColorRgba.r)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SelfIllumColorRgba.g)/0xff,
((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->SelfIllumColorRgba.b)/0xff,
((float)(100-((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->Transparency)))/100};
glMaterialfv (GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialf (GL_FRONT, GL_SHININESS,1.28*((float)Obj->ObjectInfo3ds->Materials[Obj->ObjectInfo3ds->FaceMaterial[i]]->Shininess));
glBegin(GL_TRIANGLES);
Obj->GetWorldVertexNormal(i,0,&Normal);
Normal.x+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].a].x;
Normal.y+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].a].y;
Normal.z+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].a].z;
Camera->VertexFromCamera(&Normal,&Normal);
Normal.x-=CameraVertexa.x;
Normal.y-=CameraVertexa.y;
Normal.z-=CameraVertexa.z;
glNormal3f(Normal.x,Normal.y,Normal.z);
glVertex3f( CameraVertexa.x,
CameraVertexa.y,
CameraVertexa.z );
Obj->GetWorldVertexNormal(i,1,&Normal);
Normal.x+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].b].x;
Normal.y+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].b].y;
Normal.z+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].b].z;
Camera->VertexFromCamera(&Normal,&Normal);
Normal.x-=CameraVertexb.x;
Normal.y-=CameraVertexb.y;
Normal.z-=CameraVertexb.z;
glNormal3f(Normal.x,Normal.y,Normal.z);
glVertex3f( CameraVertexb.x,
CameraVertexb.y,
CameraVertexb.z );
Obj->GetWorldVertexNormal(i,2,&Normal);
Normal.x+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].c].x;
Normal.y+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].c].y;
Normal.z+=Obj->WorldObjectVertexes[Obj->ObjectTriangles[i].c].z;
Camera->VertexFromCamera(&Normal,&Normal);
Normal.x-=CameraVertexc.x;
Normal.y-=CameraVertexc.y;
Normal.z-=CameraVertexc.z;
glNormal3f(Normal.x,Normal.y,Normal.z);
glVertex3f( CameraVertexc.x,
CameraVertexc.y,
CameraVertexc.z );
glEnd();
glDisable(GL_BLEND);
