----------------------------------------------main.cpp ------------------------------------------
main.cpp
//triangle
vec3 vertexes3_1[3];
vertexes3_1[0] = vec3(-6.75, 0.0, 0.0);
vertexes3_1[1] = vec3(-4.25, 0.0, 0.0);
vertexes3_1[2] = vec3(-5.25, 2.5, 0.0);
//quadrilateral1
vec3 vertexes4_1[4];
vertexes4_1[0] = vec3(-6.5, 3.0 ,0.0);
vertexes4_1[1] = vec3(-1.5, 3.0 ,0.0);
vertexes4_1[2] = vec3(-1.5, 5.5 ,0.0);
vertexes4_1[3] = vec3(-6.5, 5.5 ,0.0);
//quadrilateral2
vec3 vertexes4_2[4];
vertexes4_2[0] = vec3(-1.25, 3.0 ,0.0);
vertexes4_2[1] = vec3(3.75, 3.0 ,0.0);
vertexes4_2[2] = vec3(3.0, 5.5 ,0.0);
vertexes4_2[3] = vec3(-0.0, 4.0 ,0.0);
hitable *list[8];
list[0] = new sphere(vec3(0.0,-100,0), 100, new lambertian(vec3(0.8, 0.8, 0.0)));
list[1] = new sphere(vec3(-2.75, 1.25, 0), 1.25, new lambertian(vec3(0.8, 0.8, 0.0)));
list[2] = new polygon(vertexes3_1, 3, new lambertian(vec3(0.8, 0.8, 0.0)));
list[3] = new polygon(vertexes4_1, 4, new lambertian(vec3(0.8, 0.8, 0.0)));
list[4] = new polygon(vertexes4_2, 4, new lambertian(vec3(0.8, 0.8, 0.0)));
list[5] = new elliptic_plane(vec3(0.0, 1.25, 0), vec3(0, 0, 1), 1.25, 1.25, 1.25, new lambertian(vec3(0.8, 0.8, 0.0)));
list[6] = new quadratic(vec3(2.75, 1.25, 0), 1.25, 1.25, 1.25, 0, 1, 1.25, new lambertian(vec3(0.8, 0.8, 0.0)));
list[7] = new quadratic(vec3(5.5, 2.5, 0), 1.25, 2.5, 1.25, -1, 0, 2.5, new lambertian(vec3(0.8, 0.8, 0.0)));
hitable *world = new hitable_list(list,8);
vec3 lookfrom(0, 2.5, 20);
vec3 lookat(0, 2.5, 0);
float dist_to_focus = (lookfrom - lookat).length();
float aperture = 0.0;
camera cam(lookfrom, lookat, vec3(0,1,0), 20, float(nx)/float(ny), aperture, 0.7*dist_to_focus);
输出图片:
uv原图: