Rapels des fonctions et techniques hlsl (cg)

Contenu du snippet

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!

Conclusion :


Je sais que le Cg est un peu différent du c++, mais ca ressemble beaucoup...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.