Commncez par le plus simple : une matière
diffuse (Lambert). De même, dans un premier temps,
définissez la source de lumière en utilisant des
constantes déclarées dans le vertex shader. Vous pouvez
utiliser une source directionnelle ou ponctuelle.
étape 2 : utilisez des paramètres de
shader pour définir la source de lumière. Quel type de
paramètre : uniform, attribute, varying ?
étape 3 : si ce n'est pas le cas, créez une source de lumière ponctuelle.
étape 4 : si vous le souhaitez
définissez complètement la source de lumière :
ambient, diffus, spéculaire, couleur du reflet, etc.
étape 5 : ajoutez maintenant le modèle
de phong. Quels paramètres utiliser ? Comment les transmettre au
shader ?
remarque : dans quel espace travaille le shader ? Dans quel espace
faire les calculs d'éclairement ? Quelles sont les
transformations nécessaires ?
Partie 2 : calculs dans le fragment shader
Créer un fragment shader qui calcule le terme
de phong, le terme diffus sera toujours calculé par le vertex
shader. Comment transmettre les résultats du calcul entre les
deux shaders ?
remarque : dans quel espace travaille le fragment shader ? Dans quel
espace faire les calculs d'éclairement ? Quelles sont les
transformations nécessaires ?
Partie Subsidiaire : animation fluide ?
On souhaite maintenant utiliser l'idée du TP1
pour animer un personnage complet en interpolant la position de chacun
des sommets d'un maillage.
Chargez les maillages à deux instants assez
éloignés (bigguy_00.obj et bigguy_10.obj, par exemple) et
écrivez une fonction d'affichage capable d'interpoler la
position de chaque sommet du maillage en fonction du temps.
remarque : objtoy fournit les fonctions nécessaires : [Documentation et exemple]
model_vbo_clean (dans model_clean)
model_set_vertex_norm et model_set_faces_norm (dans model)
Avez-vous des remarques sur la qualité de
l'interpolation ? Quels peuvent être les problèmes ?
Comment les régler ?
Vous aurez sans doute besoin de SDL_GetTicks (cf. SDL_PG) pour
vous repérer dans le temps (cette fonction renvoie le temps en
millisecondes depuis le début de l'éxécution du
programme).
Chargez tous les maillages et reconstruisez
l'animation complète.
Comment transmettre efficacement tous les paramètres aux shaders ??
Utilisez les shaders d'éclairement des parties précédentes.
Et les ombres ?? pour les curieux, un peu de lecture sur les shadow maps.