Programmation Graphique Temps Réel
Project Foxenstein
Episode 3 - Casperstein, Opération peinture murale.
Quelques prérequis sont nécessaires pour ce TD:
- lire un fichier image ppm type P6 (
ppm(5)
), - redimensionner une image de façon à ce que ses dimensions soient des puissances de 2 (
gluScaleImage(3)
).
Quasiment tout ce que vous devez savoir sur les textures en OpenGL devrait se trouver dans ce document. Seul le multitexturing n'y est pas présenté mais ça c'est normal étant donné que c'est à vous de chercher de quelle façon il fonctionne (voir l'exercice 3).
Exercice 0. Lumière, suite.
La gestion de l'atténuation de l'intensité reçue en un point depuis une source de lumière en fonction de la distance est maintenant obligatoire. Chaque source de lumière disposera des 3 coefficients GL_CONSTANT_ATTENUATION
, GL_LINEAR_ATTENUATION
et GL_QUADRATIC_ATTENUATION
.
Exercice 1. Sol et plafond. Placage de texture basique.
Il est plus que temps d'ajouter sols et plafonds à vos niveaux. C'est ce que vous allez donc faire.
Question 1.
Ajoutez à votre outil d'édition une commande permettant d'exporter une image au format ppm contenant une vue de dessus de votre niveau. Dans cette image, les zones solides seront remplies en noir et les zones vides en blanc. Cette image vous donnera une sorte de masque sur lequel vous pourrez dessiner les textures du sol et du plafond des diverses pièces de votre niveau.Question 2.
Créez une image pour le sol de votre niveau et une pour le plafond en utilisant le masque généré par votre outil d'édition. Créez également une texture pour vos murs (on utilisera la même pour tous les murs dans un premier temps).Question 3.
Ajoutez au client 3D 2 surfaces planes subdivisées de façon régulière représentant respectivement le sol et le plafond. Texturez et éclairez ces 2 plans. Proposez une solution pour calculer des coordonnées de texture pour vos murs permettant d'éviter les problèmes de jointure au niveau de la texture puis texturez-les.Exercice 2. Lightmapping.
Vous allez ici découvrir une technique amusante: le lightmapping.
Cette technique consiste à prendre un polygone non-subdivisé pour l'éclairage, à le subdiviser, à calculer l'intensité lumineuse que reçoivent chacun de ces points des diverses sources de lumière présentes dans la scène et à les stocker dans une texture.
Question 1.
Quels sont les avantages et inconvénients de cette méthode ?Question 2.
Ecrivez un programme pour générer les lightmaps à partir d'un fichier fmf. Vous utiliserez les mêmes formules de calcul d'intensité qu'OpenGL.Question 3.
Ajoutez le chargement et l'utilisation des lightmaps à votre client 3D. N'oubliez pas que vous pouvez maintenant vous passer du système d'éclairage d'OpenGL.Question 4.
Modifiez votre méthode de calcul des lightmaps pour que si un mur se trouve entre une source et un sommet alors la contribution de cette source compte pour 0.Exercice 3. Multitexturing.
Cet exercice est obligatoire pour les groupes de 3 étudiants et facultatif pour les autres même si je vous encourage à le faire étant donné que de toute façon il fera partie du projet à rendre. :P
Le multitexturing permet d'appliquer plusieurs textures à un même polygone. L'idée pour vous va être de combiner les lightmaps calculées dans l'exercice 2 avec les textures créées dans l'exercice 1.