diff -r fc18ac4833f2 -r a0a3e334744f ccdemos/spheres_shadow.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ccdemos/spheres_shadow.cc Sun Nov 25 17:58:29 2007 +0100 @@ -0,0 +1,47 @@ +#include "raytracer.h" +#include "image.h" + +int main() +{ + Raytracer rt; + Light light1(Vector3(0.0, 5.0, 5.0), Colour(0.7, 0.3, 0.6)); + rt.addlight(&light1); + + Light light2(Vector3(-2.0, 10.0, 2.0), Colour(0.4, 0.6, 0.3)); + rt.addlight(&light2); + + Material mat0(Colour(0.7, 0.7, 0.7)); + + Box box(Vector3(-20.0, -1.2, -20.0), Vector3(20.0, -1.0, 20.0), &mat0); + rt.addshape(&box); + + Material mat1(Colour(1.0, 0.0, 0.0)); + Sphere bigsphere(Vector3(3.0, 2.0, 7.0), 3.0, &mat1); + rt.addshape(&bigsphere); + + Material mat2(Colour(0.0, 1.0, 0.0)); + Sphere smallsphere(Vector3(-5.5, 1.5, 8.0), 2.0, &mat2); + rt.addshape(&smallsphere); + + Material mat3(Colour(0.0, 0.0, 1.0)); + Sphere tinysphere(Vector3(-1.2, 0.0, 2.0), 0.5, &mat3); + rt.addshape(&tinysphere); + + int w = 800; + int h = 600; + float *fdata = rt.render(w, h); + + struct image *img; + new_image(&img, w, h, 3); + + float *fd = fdata; + for (char *cd = img->data; cd != img->data + w*h*3; cd++, fd++) { + if (*fd > 1.0) + *cd = 255; + else + *cd = (unsigned char)(*fd * 255.0); + } + free(fdata); + save_png("spheres_shadow.png", img); + destroy_image(&img); +}