rapels basé sur le hlsl,Cg ( language c, a peu pres)
produit scalaire de deux vecteurs ( dot product),
dot(v1,v2) correspond à v1.x * v2.x + v1.y * v2.y
longueur d´un vecteur ( théorème de pythagore):
length(v) correspond à sqr(dot(v,v))
normalisation d´un vecteur ( que sa longueur soit de 1 unité) :
normalize(v) correspond à v/sqr(dot(v,v)) donc
v/length(v)
Le demi-angle:
le vecteur " bissectrice" ( pour les vecteurs, il me semble que ca ne se dit pas
)
demiangle = v1 + v2
aussi con que ca!
la lumière diffuse ( lumiere directionelle):
diff = max(0,dot(IN.normal,lightdir));
la lumière diffuse ( lumiere omnidirectionelle):
lightdir = normalize(lightpos - IN.position);
diff = max(0,dot(IN.normal,lightdir));
la lumiere speculaire ( en connaissant lightdir):
camdir = normalize(campos - IN.position);
demiangle = normalize(camdir + lightdir);
specnp = max(0,dot(IN.normal, demiangle));
spec = pow(specnp,intensite);
le simple effet de lumiere:
on cherche l´intensité de la diffuse et du speculaire dans le vertexshader, qu´on multiplie par les composants des materiaux utilisés ( ca donne une couleur), et cette couleur est automatiquement interpolée pour le pixelshader.
le phong shading, effet de lumiere avancé:
au lieu de donner la couleur du vertex, on donne la normale ! ! celle ci est interpolée de la même facon que la couleur. c´est donc dans le pixel shader que l´on calcule la lumiere ! ainsi la lumiere est calculée au pixel pres! mais seul les possédeurs d´une carte graphique ayant pas mal de registres ( supportant le directx 9 en général, donc radeon 9500 ou +, geforce fx) pourront se créer cette sublimitude
malheureusement pour moi, je n´ai qu´une radeon 9000... du manque de registres, je n´ai pu faire que le phong de la diffuse...
n´oubliez pas que vous avez les fonctions reflect et refract pour la réflection et réfraction... tres utile.
Je pense que j´ai fait le tour...
ca a été utile ?