si tu as acces aux shaders, ce sera nettement plus lent de dessiner les contours en faisant un rendu en fil de fer...
et surtout, en GL, la taille des lignes n'est pas dependante de la distance, du coup en pratique, cette methode est horrible...
tout ce que t'as a faire, c'est:
glEnable(GL_CULL_FACE); // ca de toutes facons pour des objets fermes opaques ca devrait toujours etre active
glCullFace(GL_FRONT);
{
rendu de l'objet entier, tout en noir (ou plutot, de la couleur de ton contour, avec eventuellement des variations de couleurs au sein meme de l'objet, selon l'effet desire), avec un vertex shader qui deplace les vertex le long de leur normale d'une valeur fixe, qui correspondra a la taille de tes contours.
un truc tout con du genre:
out_pos = in_pos + in_normal * border_thickness;
(avec border_thickness un truc du genre ... 0.3 par exemple, si ton objet fait 10 unites de haut...)
}
glCullFace(GL_BACK);
{
rendu de l'objet comme l'a decrit IronMan. si tu as acces a des pixel shaders, ou des vertex shaders >= SM 3.0, tu peux passer directement par une texture 1D pour les degrades de couleurs de ton eclairage. et tu l'indexe juste avec le produit scalaire entre la normale et le vecteur qui va jusqu'a la lumiere, normalise entre 0 et 1.
un autre truc tout con du genre:
float3 to_light = normalize(light_pos - in_pos);
float dot = in_normal * to_light * 0.5 + 0.5;
float3 shade = sampler1D(cel_shading_gradient_texture, dot);
float3 color = sampler2D(model_texture, in_uv);
return (color * shade * light_color);
}
EDIT: ah merde... un up de 2 mois... pas fait gaffe dsl >_< pastaper...
