Projet imagerie par lancer de rayons

Voir l'énoncé au format PDF. Pour toutes questions, David Monniaux à l'École polytechnique en France.

Fragments de code fournis

Afin de ne pas compliquer le projet avec des considérations sur les bibliothèques Java et les formats de fichiers graphiques, je fournis la bibliothèque PPMWriter, qui écrit des fichiers au format PPM, lisibles avec les utilitaires de la bibliothèque NetPBM et de nombreux logiciels de dessin tels que The Gimp ou Paint Shop Pro. Son principal avantage est sa grande simplicité, puisqu'il ne comporte qu'un en-tête simple suivi de la suite des triplets d'octets définissant la couleur de chaque pixel. Cette bibliothèque fournit les appels suivants : Vous devez fournir les width×height pixels.

Syntaxe d'entrée

Objets

Opérations logiques

Transformations

Translation
Rotations
Mise à l'échelle

Scène

scene(objet, { lumières } ) représente la scène physique comprenant l'objet objet éclairé par les lumières.

Caméra

normalCamera(origin, direction, right, down) représente la caméra dont la position de l'œil est au point origin, la direction de vision est direction, le vecteur donnant la direction de la droite de l'écran est right et le vecteur donnant la direction du bas de l'écran est down.

Fichier .jray

scène,caméra représente la vision de la scène par la caméra.

Exemples

Avec l'implémentation de référence

  1. Un cube éclairé avec 3 sources (code source)
    Scene 3
  2. Une figure plus compliquée (code source)
    Scene 1

Avec d'autres logiciels

Cette animation MPEG a été réalisée avec un logiciel de synthèse, un éditeur de configurations de positions et un logiciel d'interpolation de positions, tous trois développés pour un projet étudiant. Ce n'est donc pas si difficile!

Implémentation de référence

Je mets à votre disposition une version modifiée de l'implémentation de référence, qui ajoute un quadrillage sur les images, sous forme d'une archive JAR. Elle se lance par java -jar ray-tracer.jar fichier.jray fichier.ppm largeur hauteur. Elle est également disponible en ligne (vous devez disposer pour cela d'un navigateur supportant Java 1.4) : Votre navigateur ne supporte pas Java.