L'éclairage est désactivé par défaut sur OpenGL (ce qui est une bonne chose. les triangles noirs sur fond noir, c'est pas génial), et il affiche tout en éclairage maximum. Pour activer l'éclairage, il suffit de faire un glEnable(GL_LIGHTING) et magie, tout devient noir. Il faut également ajouter une lumière, avec glEnable(GL_LIGHT0). Toujours rien.
Il ne se passe rien, car lorsque j'ai créé mon terrain, je n'ai pas spécifié les normales pour chaque point.
Ceux qui se souviennent de leurs cours de math se souviendront qu'on peut définir un plan avec le vecteur normal au plan ("orthogonal") et sa distance à l'origine. Définir la normale d'un point peut sembler bizarre, mais en fait il s'agit de la moyenne des normales des faces connectées à ce point.
Il vaut mieux avoir une structure (ou une classe) de vecteurs 3D, à partir de maintenant, ainsi que des opérations définies dessus.
Pour calculer la normale d'un point, j'ai donc pris les 8 vecteurs partant de ce point et allant vers ses voisins, fait le produit vectoriel dans le sens des aiguilles d'une montre, normalisé ce produit, et fait la moyenne des 8 produits vectoriels (puis normalisé cette somme).
Normaliser : rendre la norme (longueur) du vecteur égale à 1.
Produit vectoriel : Un calcul très utile. Non commutatif, ce qui fait qu'il faut faire les calculs dans le bon ordre si on veut que ça marche. Ce qui est fort ennuyeux.
Toujours important : il faut toujours vérifier si on ne s'est pas emmelé entre l'axe x et y.
Et voilà ce que ça donne, avec des couleurs bizarres.
La suite de la semaine est beaucoup moins marrante.