Oui, mais le problème c'est pas le clipping (qui marche bien) mais le remplissage.
nan nan, ce dont je parle, quand ca te clip ca te sort un polygone clippe, pas des lignes clippees
(polygone clippe, donc forme convexe fermee

)
bon, en pseudo code, ca donne un truc comme ca, et ca m'a l'air bcp plus adapte que la methode que t'utilise qui a l'air bcp plus general mais aussi bcp plus lourde:
void clip_poly_to_plane(poly *pin, poly *pout, plane *p)
{
float firstdot;
float curdot;
float nextdot;
int curin;
int nextin;
vertex *curvert;
vertex *nextvert;
vertex *outvert;
outvert = pout->verts;
nextvert = curvert = pin->verts;
firstdot = curdot = dot(curvert->coord, p->normal);
while (--pin->nvertices)
{
nextvert++;
nextdot = dot(nextvert->coord, p->normal);
nextin = (nextdot >= p->dist) ? 1 : 0;
if (curin) // si le point est devant le plan
{
*outvert = *curvert; // on garde ce vertex dans le poly clippe
outvert++;
pout->nvertices++;
}
if (curin != nextin) // si le point n'ext pas du meme cote que le precedent, on clippe et on insere le vertex clippe
{
float scale;
// clip
scale = (p->dist - curdot) / (nextdot - curdot);
outvert->x = curvert->x + (nextvert->x - curvert->x) * scale;
outvert->y = curvert->y + (nextvert->y - curvert->y) * scale;
outvert->y = curvert->z + (nextvert->z - curvert->z) * scale;
outvert++;
pout->numvertices++;
}
// sinon, les deux sont dehors et on insere kedal
curdot = nextdot;
curvert++;
curin = nextin;
}
// arrive ici, on doit tester le lien entre le dernier et le premier point (pour boucler le poly)
nextvert = pin->verts;
nextdot = firstdot;
nextin = (nextdot >= p->dist) ? 1 : 0;
if (curin) // si le point est devant le plan
{
*outvert = *curvert; // on garde ce vertex dans le poly clippe
outvert++;
pout->nvertices++;
}
if (curin != nextin) // si le point n'ext pas du meme cote que le precedent, on clippe et on insere le vertex clippe
{
float scale;
// clip
scale = (p->dist - curdot) / (nextdot - curdot);
outvert->x = curvert->x + (nextvert->x - curvert->x) * scale;
outvert->y = curvert->y + (nextvert->y - curvert->y) * scale;
outvert->y = curvert->z + (nextvert->z - curvert->z) * scale;
outvert++;
pout->numvertices++;
}
}
et t'appelle cette fonction pour chaque plan de l'ecran, en passant a chaque fois le poly que le precedent appel a renvoye.
bon heu j'ai tape ca a la volee, ca marche surement pas tel quel, c'est juste pour l'algo general
et tu peux clipper n'importe quoi, pas que les coordonnees des vertices du poly, mais tout ce qui devra/pourra etre interpole: les couleurs, coords de textures, normales, etc...