/* - use fopen to open the file, and fclose when you're done */ void frender(camera c, frame f, char *filename) //void render(stage g) { char name[32]; int i, j; for (i=0; i<32; i++) name[i]='\0'; sprintf(name, "%s.ppm", filename); FILE *fp = fopen (name, "a"); fprintf(fp, "P3\n"); fprintf(fp, "%d %d\n", c.w, c.h); fprintf(fp, "255\n"); for(i=0; i < c.h; i++) { for(j=0; j < c.w; j++) { vec p = {j,i,0}; vec loc = logical_loc(c, p); vec dir = vec_sub(loc, c.loc); vec normdir = vec_norm(dir); ray r = {c.loc, normdir}; rgb col = ftrace(r, f); //rgb_print_bytes(col); fprintf(fp, "%d %d %d\n",bytify(col.r),bytify(col.g),bytify(col.b)); } } fclose(fp); }
/* render : runs trace_ray over each pixel, writes colors to file f */ void render(FILE *f, stage g) { int x, y; xyz loc; ray r; r.origin = g.c.loc; fprintf(f, "P3 %d %d 255\n", g.c.w, g.c.h); for (y=0; y<g.c.h; y++) { for (x=0; x<g.c.w; x++) { loc = logical_loc(g.c, x, y); r.dir = xyz_sub(loc,r.origin); color_show_bytes(f, trace_ray(g.s, r)); } } }
void render(stage g) { int i, j; camera c = g.c; scene sc = g.s; printf("P3\n"); printf("%d %d\n", c.w, c.h); printf("255\n"); for(i=0; i < c.h; i++) { for(j=0; j < c.w; j++) { vec p = {j,i,0}; vec loc = logical_loc(c, p); vec dir = vec_sub(loc, c.loc); vec normdir = vec_norm(dir); ray r = {c.loc, normdir}; rgb col = trace_ray(sc, r); rgb_print_bytes(col); } } }
#include "raytracer.h" int main() { camera cam = {xyz_expr(0,0,-5), 120, 120}; color bg = color_expr(0,0,0.25); poster p = poster_expr(xyz_expr(-1.5,1.5,4.5), 3, 3, tex_green, color_expr(0,0,0)); object o1 = {POSTER, {.p = p}, NULL}; obj_list *os = ol_singleton(o1); scene scn; scn.bg = bg; scn.objects = os; stage stg = {cam, scn}; camera tcam = {xyz_expr(0,0,-1), 120, 120}; xyz loc1 = logical_loc(tcam,60,51); xyz loc2 = logical_loc(tcam,1,0); xyz loc3 = logical_loc(tcam,60,80); ray orgray = {cam.loc, xyz_sub(loc1,cam.loc)}; hit_test ht = intersect(orgray, o1); xyz htpt = ray_position(orgray,ht.t); double d1 = dist(xyz_expr(-1.5,1.5,4.5),htpt); double d2 = sqrt(p.w*p.w+p.h*p.h); printf("\n\n *** testing intersect ***\n"); xyz_show(stdout,htpt); hit_test_show(stdout,ht); printf("\n\n *** testing dist ***\n");