Pages vues depuis 25/07/2007 : 25 242 078
Index du forum »» Création-Développement »» Demande de bench #Zero
>pour intercaler le moindre octet pour du FOG
Justement je vois pas l'interet de faire un (draw)array avec en plus une valeur fog et le faire par Warp3D..
Honnêtement le plus radical c'est de calculer ton fog en soft (meme lentement...) mais une fois pour toute dans une table selon Z genre UBYTE FogValues[1024];
Puis faire un truc du genre pour chaque vertex
n=vertex->z*1024.0;
fog=FogValues[n];
invfog=255-fog;
color[i][0] = (UBYTE) (fog * color[i][0] + invfog * rFog);
color[i][1] = (UBYTE) (fog * color[i][1] + invfog * gFog);
color[i][2] = (UBYTE) (fog * color[i][2] + invfog * bFog);
tu peut aussi precalculer toute la valeur RGBA du fog dans FogValues si tu n 'es pas à 4Ko près
fogRGBA=FogValuesRGBA[n];
color[i][0] = (UBYTE) (fogRGBA[3] * color[i][0] + fogRGBA[0] );
color[i][1] = (UBYTE) (fogRGBA[3] * color[i][1] + fogRGBA[1] );
color[i][2] = (UBYTE) (fogRGBA[3] * color[i][2] + fogRGBA[2] );
Et si tu mets tes valeurs RGBA de color et fogRGBA dans des registres 32 bits (des unions en C) alors cela fera pas grand mal de tout faire au cpu : 3 mul sur des registres par vertex
Alain
Le rendu peut-être potentiellement salopé. Le fog est calculé au pixel, le blending au vertex.
Imagines que tu as une ligne qui va de Z=0 à Z=1 et un fog qui va de start=0,35 à end=0,40 (exemple volontairement abusif). Il faudrait un éclairage au vertex pour avoir le bon rendu, le blending n'en est pas capable.
On est d'accord
Mais je suis pas sûr que Warp3D non plus fasse un fog au pixel près...
Sinon le seul moyen d'émuler le fog au pixel près c'est de mettre le fog précalculé en RBA dans une texture mappée selon z (genre u=z; v=0;)
Tu m'as pas répondu à ça
Question: j'ai noté que le bump de Microbe3D marchait plus sur ma Sam460 sur un WaRp3D plus récent: connais tu quel modif de code il faut pour notre bump ?
Normalement ça devrait donner ça:
http://thellier.free.fr/Docs/Juliette_grab500.JPG
Alain