-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLancerRaytracer.java
61 lines (45 loc) · 2.34 KB
/
LancerRaytracer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.rmi.RemoteException;
import java.time.Instant;
import java.time.Duration;
import raytracer.Disp;
import raytracer.Scene;
import raytracer.Image;
public class LancerRaytracer {
public static String aide = "Raytracer : synthèse d'image par lancé de rayons (https://en.wikipedia.org/wiki/Ray_tracing_(graphics))\n\nUsage : java LancerRaytracer [fichier-scène] [largeur] [hauteur]\n\tfichier-scène : la description de la scène (par défaut simple.txt)\n\tlargeur : largeur de l'image calculée (par défaut 512)\n\thauteur : hauteur de l'image calculée (par défaut 512)\n";
public static void main(String args[]) throws RemoteException {
// Le fichier de description de la scène si pas fournie
String fichier_description="simple.txt";
// largeur et hauteur par défaut de l'image à reconstruire
int largeur = 512, hauteur = 512;
if(args.length > 0){
fichier_description = args[0];
if(args.length > 1){
largeur = Integer.parseInt(args[1]);
if(args.length > 2)
hauteur = Integer.parseInt(args[2]);
}
}else{
System.out.println(aide);
}
// création d'une fenêtre
Disp disp = new Disp("Raytracer", largeur, hauteur);
// Initialisation d'une scène depuis le modèle
Scene scene = new Scene(fichier_description, largeur, hauteur);
// Calcul de l'image de la scène les paramètres :
// - x0 et y0 : correspondant au coin haut à gauche
// - l et h : hauteur et largeur de l'image calculée
// Ici on calcule toute l'image (0,0) -> (largeur, hauteur)
int x0 = 0, y0 = 0;
int l = largeur, h = hauteur;
// Chronométrage du temps de calcul
Instant debut = Instant.now();
System.out.println("Calcul de l'image :\n - Coordonnées : "+x0+","+y0
+"\n - Taille "+ largeur + "x" + hauteur);
Image image = scene.compute(x0, y0, l, h);
Instant fin = Instant.now();
long duree = Duration.between(debut, fin).toMillis();
System.out.println("Image calculée en :"+duree+" ms");
// Affichage de l'image calculée
disp.setImage(image, x0, y0);
}
}