Guest User

Untitled

a guest
Feb 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. \subsection{Moteur 3D}
  2.  
  3. Le dévellopement du moteur 3d ne s'est pas faite en un bloc mais en plusieurs parties bien distinctes.
  4.  
  5. \subsubsection{Premier essais et choix du binding}
  6.  
  7. Après quelques recherches et l'avis de Marwan sur le forum d'EPITA 2016 nous avons décidé d'utiliser lablgl qui marchait plutôt bien sur les racks. Au final ce choix n'a peut être pas été le plus judicieu en raison des nombreuses limitations de lablgl (Open GL 1.1). Les premiers essais ont donc été l'affichage d'un triangle en rotation en 2d puis l'affichage d'un cube en 3d. Une fois lablgl pris en main il était temps de se lancer pour le moteur 3d du logiciel.
  8.  
  9. \subsubsection{Parsing du fichier .obj}
  10.  
  11. Tout commence par une fonction n'ayant rien à voir avec lablgl, le parsing du fichier obj. La syntaxe étant relativement simple, le tout a été assez rapide à implémenter mais nous nous y sommes repris à deux fois. Tout d'abord on parcourt les vertices (sommets) et on les ajoute dans une liste. Ensuite on parcourt les faces et, de même, on les ajoute dans une liste différente. Une fois que ceci est fait il suffit de construire la liste finale en parcourant la liste des faces pour construire la liste complète des vertices. Pour cela on prend chaque face et ajoute les 3 vertices désignées par ses composantes. Ainsi, une fois terminé, le traitement nous fourni une liste très facilement utilisable comme nous le verrons par la suite.\\
  12. Nous avions commencé en codant nos propres fonctions de manipulation de chaines de caractères mais avons finalement fait marche arrière pour utiliser le module str bien plus performant.
  13.  
  14. \subsubsection{Affichage de la liste de vertices}
  15.  
  16. Pour l'affichage de la liste (et donc de la map), la constution intelligente de celle-ci nous a grandement facilité la tache. Il nous a suffit d'itérer sur celle-ci avec une fonction désignant les vertices comme des vertices opengl avec les options nécessaires.\\
  17. Une des fonctions de rendu amusante que nous avons aussi ajouté est le rendu dynamique de la carte, c'est à dire qu'au lancement du programme on voit la montagne émerger du sol. Pour arriver à ce résultat nous créons tout d'abord une liste de vertices sensiblement semblable à la liste de vertices finale dont nous parlions précédemment sauf que celle-ci contient des vertices à une hauteur de 0.\\
  18. Ensuite, à chaque rafraichissement on ajoute 1 à la hauteur des vertices jusqu'à ce qu'on arrive à la hauteur désirée.
  19.  
  20. \subsubsection{Texturing}
  21.  
  22. Une des parties les plus difficiles du moteur 3d à été l'implémentation des textures dans le code. Non pas que ce soit difficile sur le papier mais cela est très compliqué à faire fonctionner correctement avec lablgl.\\
  23. Tout d'abord il faut charger les images, pour cela on ne peut pas juste charger simplement un fichier, il faut récupérer tout les pixels de l'image pour les mettre au bon format. Ensuite, une fois l'image chargée il faut préconfigurer la texture en lui attribuant certaines options opengl. Une fois cette étape passée, quand on iter sur la liste de vertices, on désigne la texture à utiliser sur ce que l'on dessine puis pour chaque vertice on désigne un point de l'image à lui attribuer.
  24.  
  25. \subsubsection{Eau}
  26.  
  27. Pour l'eau il a fallu résoudre un des principaux inconvénients de lablgl, l'absence de shaders. En effet, nous ne voulions pas seulement une eau statique, nous voulions qu'elle bouge. Or cet effet se réalise très facilement avec des shaders mais il a fallu trouver une solution.\\
  28. Pour cela nous avons jouer sur l'affichage de la texture en ajoutant un décalage à chaque rafraichissement. Ainsi nous déplacons la texure constamment pour une sensation d'eau mouvante. La texture quand à elle se répète de nombreuses fois sur la surfaces planes pour avoir un rendu plus réaliste et éviter d'utiliser une texture gigantesque.
  29.  
  30. \subsubsection{Skybox}
  31.  
  32. Pour avoir un rendu plus joli, nous avons décidé d'implémenter la skybox. C'est à dire une boite avec une texture spéciale donnant l'illusion qu'il y a un ciel dans l'environnement 3d. Pour cela nous avons codé en dur le cube et avons fait de même pour attribuer les textures. Un joyeux casse tête pour attribuer les bons points de l'image aux bonnes vertices mais une fois terminé, le rendu est plutôt satisfaisant.
  33.  
  34. \subsubsection{Modes d'affichages}
  35.  
  36. Dans un soucis de précision, nous avons implémenté tout les modes d'affichages par lablgl plus certains à nous. Ainsi il est possible de visualiser la map en mode fil de fer, en points où encore en plein (texturé ou non) ainsi qu'avec un gradient de couleur en fonction de la hauteur.
  37.  
  38. \subsubsection{Gestion de la caméra}
  39.  
  40. Dans un premier temps nous avons commencé par une caméra freefly relativement simple qui permettait uniquement de se déplacer d'avant en arrière, sur les côtés et d'orienter la caméra vers le haut ou sur les côtés. Cependant celle-ci comportait quelques problèmes en particulier au niveau des rotations vers le haut ou vers le bas.
Add Comment
Please, Sign In to add comment