|
2756 | 2756 | #endif
|
2757 | 2757 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2758 | 2758 | [Listing [quad-final]: <kbd>[quad.h]</kbd> Final quad class]
|
2759 |
| -</div> |
2760 | 2759 |
|
| 2760 | +And now we add a new scene to demonstrate our new `quad` primitive: |
| 2761 | + |
| 2762 | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight |
| 2763 | + void quads(scene& scene_desc) { |
| 2764 | + scene_desc.image_width = 400; |
| 2765 | + scene_desc.aspect_ratio = 1.0; |
| 2766 | + scene_desc.samples_per_pixel = 100; |
| 2767 | + |
| 2768 | + scene_desc.cam.aperture = 0.0; |
| 2769 | + scene_desc.cam.vfov = 80.0; |
| 2770 | + scene_desc.cam.lookfrom = point3(0,0,9); |
| 2771 | + scene_desc.cam.lookat = point3(0,0,0); |
2761 | 2772 |
|
| 2773 | + hittable_list& world = scene_desc.world; |
| 2774 | + |
| 2775 | + // Materials |
| 2776 | + auto left_red = make_shared<lambertian>(color(1,.2,.2)); |
| 2777 | + auto back_green = make_shared<lambertian>(color(.2,1,.2)); |
| 2778 | + auto right_blue = make_shared<lambertian>(color(.2,.2,1)); |
| 2779 | + auto upper_orange = make_shared<lambertian>(color(1,.5,0)); |
| 2780 | + auto lower_teal = make_shared<lambertian>(color(.2,.8,.8)); |
| 2781 | + |
| 2782 | + // Quads |
| 2783 | + world.add(make_shared<quad>(point3(-3,-2,5), vec3(0,0,-4), vec3(0,4,0), left_red)); |
| 2784 | + world.add(make_shared<quad>(point3(-2,-2,0), vec3(4,0,0), vec3(0,4,0), back_green)); |
| 2785 | + world.add(make_shared<quad>(point3(3,-2,1), vec3(0,0,4), vec3(0,4,0), right_blue)); |
| 2786 | + world.add(make_shared<quad>(point3(-2,3,1), vec3(4,0,0), vec3(0,0,4), upper_orange)); |
| 2787 | + world.add(make_shared<quad>(point3(-2,-3,5), vec3(4,0,0), vec3(0,0,-4), lower_teal)); |
| 2788 | + } |
| 2789 | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ |
| 2790 | + |
| 2791 | + int main() { |
| 2792 | + ... |
| 2793 | + switch (0) { |
| 2794 | + case 1: random_spheres(scene_desc); break; |
| 2795 | + case 2: two_spheres(scene_desc); break; |
| 2796 | + case 3: earth(scene_desc); break; |
| 2797 | + case 4: two_perlin_spheres(scene_desc); break; |
| 2798 | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight |
| 2799 | + default: |
| 2800 | + case 5: quads(scene_desc); break; |
| 2801 | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ |
| 2802 | + } |
| 2803 | + |
| 2804 | + scene_desc.render(); |
| 2805 | + } |
| 2806 | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 2807 | + [Listing [quad-scene]: <kbd>[main.cc]</kbd> A new scene with quads] |
| 2808 | + |
| 2809 | +  |
2762 | 2810 |
|
2763 | 2811 |
|
2764 | 2812 | Lights
|
|
2935 | 2983 | case 2: two_spheres(scene_desc); break;
|
2936 | 2984 | case 3: earth(scene_desc); break;
|
2937 | 2985 | case 4: two_perlin_spheres(scene_desc); break;
|
| 2986 | + case 5: quads(scene_desc); break; |
2938 | 2987 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
|
2939 | 2988 | default:
|
2940 |
| - case 5: simple_light(scene_desc); break; |
| 2989 | + case 6: simple_light(scene_desc); break; |
2941 | 2990 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
2942 | 2991 | }
|
2943 | 2992 |
|
|
2950 | 2999 | <div class='together'>
|
2951 | 3000 | We get:
|
2952 | 3001 |
|
2953 |
| -  |
| 3002 | +  |
2954 | 3003 |
|
2955 | 3004 | </div>
|
2956 | 3005 |
|
|
2970 | 3019 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2971 | 3020 | [Listing [rect-light]: <kbd>[main.cc]</kbd> A simple rectangle light plus illuminating ball]
|
2972 | 3021 |
|
2973 |
| -  |
| 3022 | +  |
2975 | 3024 |
|
2976 | 3025 |
|
2977 | 3026 | Creating an Empty “Cornell Box”
|
|
3014 | 3063 | case 2: two_spheres(scene_desc); break;
|
3015 | 3064 | case 3: earth(scene_desc); break;
|
3016 | 3065 | case 4: two_perlin_spheres(scene_desc); break;
|
3017 |
| - case 5: simple_light(scene_desc); break; |
| 3066 | + case 5: quads(scene_desc); break; |
| 3067 | + case 6: simple_light(scene_desc); break; |
3018 | 3068 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
|
3019 | 3069 | default:
|
3020 |
| - case 6: cornell_box(scene_desc); break; |
| 3070 | + case 7: cornell_box(scene_desc); break; |
3021 | 3071 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
3022 | 3072 | }
|
3023 | 3073 |
|
|
3030 | 3080 | <div class='together'>
|
3031 | 3081 | We get:
|
3032 | 3082 |
|
3033 |
| -  |
| 3083 | +  |
3034 | 3084 |
|
3035 | 3085 | This image is very noisy because the light is small.
|
3036 | 3086 | </div>
|
|
3099 | 3149 | <div class='together'>
|
3100 | 3150 | This gives:
|
3101 | 3151 |
|
3102 |
| -  |
| 3152 | +  |
3103 | 3153 |
|
3104 | 3154 | </div>
|
3105 | 3155 |
|
|
3445 | 3495 | <div class='together'>
|
3446 | 3496 | Which yields:
|
3447 | 3497 |
|
3448 |
| -  |
| 3498 | +  |
3449 | 3499 |
|
3450 | 3500 | </div>
|
3451 | 3501 |
|
|
3654 | 3704 | case 2: two_spheres(scene_desc); break;
|
3655 | 3705 | case 3: earth(scene_desc); break;
|
3656 | 3706 | case 4: two_perlin_spheres(scene_desc); break;
|
3657 |
| - case 5: simple_light(scene_desc); break; |
3658 |
| - case 6: cornell_box(scene_desc); break; |
| 3707 | + case 5: quads(scene_desc); break; |
| 3708 | + case 6: simple_light(scene_desc); break; |
| 3709 | + case 7: cornell_box(scene_desc); break; |
3659 | 3710 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
|
3660 | 3711 | default:
|
3661 |
| - case 7: cornell_smoke(scene_desc); break; |
| 3712 | + case 8: cornell_smoke(scene_desc); break; |
3662 | 3713 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
3663 | 3714 | }
|
3664 | 3715 |
|
|
3671 | 3722 | <div class='together'>
|
3672 | 3723 | We get:
|
3673 | 3724 |
|
3674 |
| -  |
| 3725 | +  |
3675 | 3726 |
|
3676 | 3727 | </div>
|
3677 | 3728 |
|
|
3779 | 3830 | case 2: two_spheres(scene_desc); break;
|
3780 | 3831 | case 3: earth(scene_desc); break;
|
3781 | 3832 | case 4: two_perlin_spheres(scene_desc); break;
|
3782 |
| - case 5: simple_light(scene_desc); break; |
3783 |
| - case 6: cornell_box(scene_desc); break; |
3784 |
| - case 7: cornell_smoke(scene_desc); break; |
| 3833 | + case 5: quads(scene_desc); break; |
| 3834 | + case 6: simple_light(scene_desc); break; |
| 3835 | + case 7: cornell_box(scene_desc); break; |
| 3836 | + case 8: cornell_smoke(scene_desc); break; |
3785 | 3837 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
|
3786 |
| - case 8: final_scene(scene_desc); break; |
3787 |
| - default: |
3788 |
| - case 9: default_scene(scene_desc); break; |
| 3838 | + case 9: final_scene(scene_desc); break; |
| 3839 | + default: default_scene(scene_desc); break; |
3789 | 3840 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
3790 | 3841 | }
|
3791 | 3842 |
|
|
3797 | 3848 | <div class='together'>
|
3798 | 3849 | Running it with 10,000 rays per pixel (sweet dreams) yields:
|
3799 | 3850 |
|
3800 |
| -  |
| 3851 | +  |
3801 | 3852 |
|
3802 | 3853 | </div>
|
3803 | 3854 |
|
|
0 commit comments