Browse Source

Update ch11 reflection scene to render the 3 different view

Godzil 4 years ago
parent
commit
d05a0fb4d0
1 changed files with 28 additions and 4 deletions
  1. 28 4
      tests/ch11_reflection.cpp

+ 28 - 4
tests/ch11_reflection.cpp

@@ -97,21 +97,45 @@ int main()
     w.addObject(&ref3);
 
     /* Add light */
-    Light light = Light(POINT_LIGHT, Point(-10, 10, -10), Colour(1, 1, 1));
+    //Light light = Light(POINT_LIGHT, Point(-10, 10, -10), Colour(1, 1, 1));
+    Light light = Light(AREA_LIGHT, Point(-9, 10, -9),
+            Vector(2, 0, 0), 5,
+            Vector(0, 2, 0), 5,
+
+            Colour(1, 1, 1));
 
     w.addLight(&light);
 
+#define WIDTH (100)
+#define HEIGHT (50)
+
     /* Set the camera */
-    Camera camera = Camera(100, 50, M_PI / 3);
+    Camera camera = Camera(WIDTH, HEIGHT, M_PI / 3);
     camera.setTransform(viewTransform(Point(0, 1.5, -5),
                                       Point(0, 1, 0),
                                       Vector(0, 1, 0)));
-
     /* Now render it */
+    printf("Render full scene...\n");
     Canvas image = camera.render(w);
-
     image.SaveAsPNG("ch11_reflection.png");
 
+    /* Let's try to zoom on the small reflective ball in the back */
+    Camera camera2 = Camera(HEIGHT, HEIGHT, M_PI / 40);
+    camera2.setTransform(viewTransform(Point(0, 1.5, -5),
+                                      Point(1, 1, .4),
+                                      Vector(0, 1, 0)));
+    printf("Render reflective ball...\n");
+    Canvas image2 = camera2.render(w);
+    image2.SaveAsPNG("ch11_zooming_on_reflective_ball.png");
+
+    /* Zooming on a reflexion on a reflective ball */
+    Camera camera3 = Camera(HEIGHT, HEIGHT, M_PI / 600);
+    camera3.setTransform(viewTransform(Point(0, 1.5, -5),
+                                      Point(1.05, 1.063, .4),
+                                      Vector(0, 1, 0)));
+    printf("Render reflection on ball...\n");
+    Canvas image3 = camera3.render(w);
+    image3.SaveAsPNG("ch11_reflection_on_ball.png");
 
     return 0;
 }