You are on page 1of 9

Projet Math 3D

Rapport

GI3 VISUAL
Bartholomew George

Tanguy Lépine, Guillaume Rioual


14 mai 2023

1
Table des matières
1 Introduction 3

2 Choix des technologies 4

3 Implémentation 5
3.1 Mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 Limites et perspective 8

5 Conclusion 9

2
1 Introduction
Un des projets de notre année était la création d’un mini-moteur graphique 3D où
l’on pourrait créer, afficher et manipuler des objets 3D polygonaux. Nous pourrions ainsi
appliquer sur eux des algorithmes permettant de faire différentes choses tel que le texturage,
l’augmentation ou la diminution grâce au subdivisions de surfaces, l’ombrage de polygones.

Dans un premier temps, nous expliquerons pourquoi nous avons choisi le java pour
travailler sur ce projet. Nous expliquerons ensuite ce que l’on a implémenté et comment.
Pour finir, nous parlerons des limites de ce projet et des problèmes que l’on a rencontré.

3
2 Choix des technologies
Pour réaliser ce projet, nous avons décidé d’utiliser Java car c’est un langage que nous
avons beaucoup utilisé en cycle ingénieur et car nous étions familié avec la bibliothèque
d’affichage 2D, JFrame. On a donc utilisé l’IDE Eclipse, qui lui aussi est un outil que nous
avons déjà utilisé.
De plus, nous avons décidé de coder à partir de zéro sans l’aide d’OpenGL. Cela nous
permet de récréer les fonctions de bases ainsi que celles plus avancés sans être tenté par
OpenGL. Cela nous permet aussi de comprendre en intégralité comment est implémenté
un moteur graphique.

4
3 Implémentation
3.1 Mathématiques
Nous avons implémentés les structures mathématiques de base présentes dans les TPs
et nécessaires au fonctionnement de notre moteur graphique :

• Vecteurs

• Matrices

• Quaternions

• Angles d’Euler

• Triangles

• Polygones

Nous avons mis en place une représentation 3D en utilisant une projection orthogonale.

Nous avons également implémenté les classes de plusieurs formes de base ou primitives :

• Cubes

• Sphères

• Cylindres

5
3.2 Graphiques
Pour tracer les formes, nous avons plusieurs algorithmes :
• les arêtes des triangles grâce à l’algorithme de Bresenham.
• Les faces grâce à l’algorithme ordered seed fill
Nous avons implémentés un système de lecture de fichiers .obj, ce dernier récupère les
points et triangles de l’objet nous permettant ainsi de l’afficher à l’écran.

Figure 1 – Rendu d’un modèle .obj importé

Avec les flèches du clavier, nous avons mis en place la possibilité de déplacer les objets
dans l’espace, les coordonnées de la caméra définissent le centre de l’écran et les objets
sont positionnées par rapport à leurs propres coordonnées ainsi que celles de la caméra.
En plus de ce déplacement nous avons aussi implémenté une rotation continue.

Nous avons également mis en place l’algorithme du peintre, qui trie les triangles en
mettant les plus éloignés en premier et les plus proches en dernier, permettant de colorier
en allant du plus loin au plus proche.
Pour l’algorithme du ordered seed fill, nous choisissons comme seed de base le point de
gravité des triangles, puis on trace la ligne correspondante avant d’appeler récursivement
la fonction en changeant de seed, cette seed est le milieu de la ligne. Dans cette algorithme,
on réutilise l’algorithme de traçage de ligne, mais comme on veut dessiner pixel par pixel
alors on l’appelle avec le même point pour les deux extrémités.

Lors du coloriage, nous nous sommes malheureusement rendu compte que colorier tous
les pixels était une tâche trop lourde, nous avons donc réaliser des coloriages en coloriant
seulement partiellement les objets afin d’améliorer les performances.

6
Figure 2 – Rendu de primitives avec un coloriage d’un pixel sur 2

Figure 3 – Rendu de primitives avec un coloriage d’un pixel sur 4

7
4 Limites et perspective
Le projet consomme beaucoup de ressources, ceci est dû au fait que le programme
tourne exclusivement sur le processeur et n’utilise pas la carte graphique, de plus notre
algorithme de coloriage, l’orderer seed fill ainsi que l’algorithme du peintre consomme
également beaucoup de ressources.
Le fait que ces algorithmes soient trop lourd à exécuter nous empêche de pouvoir colorier
tous les pixels car l’algorithme n’a pas le temps de finir de colorier.

Figure 4 – Problème lors du "coloriage" de chaque pixel

Une des amélioration de notre projet serai de pouvoir permettre à ce dernier de pouvoir
être exécute par la carte graphique, une autre amélioration serai d’implémenter l’algorithme
du Scanline Fill qui est plus optimisé que l’algorithme ordered seed fill.

On pourrait aussi mettre en place une caméra, qui plutôt que se déplacer dans un
environnement 2D (Vertical, Horizontal) pourrait se déplacer dans l’environnement 3D. Les
lumières serait un axe de développement supplémentaire car elles permettent de travailler
sur les ombres et de donner plus de vie au monde 3D.

Rajouter d’autres extension de fichier peuvent être utile car le .obj n’est pas la seule
utilisé dans la création d’asset 3D.

8
5 Conclusion
Comme nous sommes parti de zéro pour créer ce moteur graphique, ce projet était
très intéressant à travailler, cela nous a permis d’étudier le fonctionnement des moteurs
graphique à bas niveau. Il reste bien sûr de nombreux points sur lesquels nous n’avons pas
travaillé mais ce qu’on a fait nous permettra de vous montrer le plus de fonctionnalités
que nous estimions importantes pour un projet de cette envergure.

Nous avons pris pleinement conscience de la quantité de travail que demandait un tel
projet après avoir travaillé dessus et avons appris beaucoup de choses.

You might also like