C'est des rapels de comment calculer quoi, et aussi la technique du phong shading...
*************
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...
note:
dans le pixelshader n'oubliez pas de normaliser la normale obtenue, car l'interpolation utilisée est linéaire et non pas sphérique. donc, en gros, ce ne serait pas aussi bien!
n'oubliez pas que vous avez les fonctions reflect et refract pour la réflection et réfraction... tres utile.
voila! j'espere que ca aura été utile!