Forum » » Création-Développement » » Demande de bench #Zero
Posté : 21-02-2017 11:21
>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
>
Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=2404&forum=14