Commit 425085d7 authored by Justine Martin's avatar Justine Martin 💖
Browse files

rapport : Ajout des parties sur le splitscreen, le systeme de gui, les

modification de glitter et ajout d'un template
parent 1e08f790
Loading
Loading
Loading
Loading

rapport/Rapport.pdf

0 → 100644
+265 KiB

File added.

No diff preview for this file type.

+3 −0
Changes for rapport/compile_report.sh: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
#!/bin/bash

pandoc rapport.md -o Rapport.pdf --toc --template eisvogel.tex --listings --number-sections --top-level-division=chapter

rapport/eisvogel.tex

0 → 100644
+1102 −0

File added.

Preview size limit exceeded, changes collapsed.

+32 −1
Changes for rapport/rapport.md: 32 added lines, 1 removed line.
Original line number Diff line number Diff line
---
title: (sp)Ace Combat
subtitle: Synthèse d'image
date: 2021 - 2022
author:
- Benjamin CASTEL (21700197)
- Justine MARTIN (21909920)
book: true
titlepage: true
toc-own-page: true
lang: fr-FR
classoption: oneside
colorlinks: true
...

# (sp)Ace Combat - rapport

## Introduction
@@ -40,8 +55,24 @@ De plus, nous nous sommes fixé les contraintes suivantes pour ne pas nous épar
<!-- TODO : Compléter -->
### Modifications apportées à *glitter*

Nous avons dû modifier quelque peu glitter afin de permettre de mieux gérer certains éléments de notre projet
Nous avons dû modifier quelque peu glitter afin de permettre de mieux gérer certains éléments de notre projet :

- Comme *glitter* est utilisé en tant que dépendance de notre projet actuel, certaines variables de *glitter* tel que *GLFW3_LIBAIRIES* étaient nécessaire pour le linking <!-- park --> de notre projet et n'étaient pas accessible. Nous avons donc ajouté des variables en *PARENT_SCOPE* dans le *external.cmake*.
- La touche *Q* (qwerty) ne ferme plus la fenêtre
- La touche *espace* ne bloque plus les update du jeu
- Possibilité d'envoyer des *boolean* aux *shaders* sous la forme d'*uniform*


### Système d'entités

Le système d'entités est géré par la classe `model/Entity`. Cette classe a pour but de gérer une unité dans l'espace 3D, notamment de gérer sa position, sa rotation, son échelle (qui peuvent ensuite être transmis au `glapi` de glitter)

### Système de GUI

Le système de GUI passe par une classe `GuiElement` ainsi qu'un shader qui lui est spécialement réservé (disponible dans *shaders/gui.f.glsl* et *shaders/gui.v.glsl*). Il est extrêmement simple car il ne fait que de d'afficher une texture sur un rectangle en 2D. L'espace de coordonné a été quelque peu modifié afin que le coin en bas à gauche de la fenêtre corresponde à la coordonnée (0, 0) et le coin en haut à droite de la fenêtre correspond à (1, 1). Cette méthode nous permet d'avoir des dimension et une position relative à la dimension de la fenêtre. A l'inverse, si nous avions utilisé un système basé sur le nombre de pixel disponible dans la fenêtre, il aurait fallut recalculer la taille et la position des différents éléments du GUI en fonction de comment la fenêtre se redimensionne. Notre méthode permet donc de gérer cela de manière bien plus simple puisque le placement et les dimensions sont relatifs aux dimensions de la fenêtre.

Comme pour les entités, les éléments du GUI sont ajoutés dans leur propre tableau (`std::vector<std::shared_ptr<GuiElement>>`) ce qui permet d'optimiser leur rendu en limitant les opération de *bind* notamment. Ils sont également séparés des entités puisqu'il faut au préalable désactiver les tests de 3D afin qu'OpenGL les "dessine" bien au dessus de ce qui à précédemment été dessiné.  

### Split-screen

La gestion du split-screen est très simple. Il suffit de changer le viewport d'OpenGL, comprendre par là la zone de la fenêtre sur laquelle OpenGL va dessiner. On va d'abort définir le viewport comme faisant toute la largeur de la fenêtre et la moitié de la hauteur totale de la fenêtre avant de dessiner une première fois la scène en placant la caméra derrière le premier joueur. On définit ensuite la zone comme étant l'autre moitié restante, on place la caméra derrière le second joueur et l'on dessine une nouvelle fois la scène dans son intégralité.