Le but de ce TD est d'implementer une ebauche de jeu video First-Person Shooter (FPS) a la Doom, en vision subjective 2D 1/2.
Plus precisement nous allons nous interesser au moteur graphique, base
sur un lanceur de rayons en 2D. Pour representer le domaine du jeu en
memoire nous utiliserons une triangulation de Delaunay 2D avec
contraintes, ou chaque contrainte representera un morceau de mur et ou
le reste des aretes servira a partitionner le domaine en cellules
simples (en l'occurence des triangles), ce qui nous permettra de faire
du lancer de rayons efficacement. Notez que les triangulations de
Delaunay sont un choix parmi d'autres structures de donnees pour le
lancer de rayons, comme les decompositions trapezoidales, les
hierarchies de
volumes englobants ou les Binary Space Partition trees.
![]() |
![]() |
Fig. 1
- Le jeu Doom (1993). A
gauche,
la jaquette du jeu. A droite, dans le feu de l'action.

public HalfedgeHandle<Point_2>
insert(Point_2 p,
Point_2 q) qui
insere
une
nouvelle
arete de contrainte [p,q] dans la triangulation. Le
travail a effectuer se repartit comme suit :Map map = new Map(r);et decommentez celle-ci :
Collection<TriangulationDSFace_2<Point_2>> facesDel = r.del.finiteFaces();
LinkedList<Point_2[]> trianglesDel = new LinkedList<Point_2[]>();
for (TriangulationDSFace_2<Point_2> f : facesDel)
trianglesDel.add(new Point_2[]{f.vertex(0).getPoint(), f.vertex(1).getPoint(), f.vertex(2).getPoint()});
Collection<HalfedgeHandle<Point_2>> cEdgesDel = r.del.constraintEdges();
LinkedList<Point_2[]> cSegmentsDel = new LinkedList<Point_2[]> ();
for (HalfedgeHandle<Point_2> e : cEdgesDel)
cSegmentsDel.add(new Point_2[]{e.getVertex(0).getPoint(), e.getVertex(1).getPoint()});
map.addTriangles(trianglesDel);
map.addFatSegments(cSegmentsDel);
RayCastWindow f = new RayCastWindow (r);Si tout se passe bien vous, devriez maintenant voir apparaitre la scene telle que vue par le joueur, avec a peu pres le meme rendu que dans la figure 2.
textureImg = ImageIO.read(new File(textureFileName));du constructeur de la classe RayCastWindow. Ainsi votre code chargera l'image de la texture dans le champ textureImg de la classe RayCastWindow, ou bien il generera une exception si le fichier n'est pas present.

