Beispiel #1
0
/* - 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);
}
Beispiel #2
0
/* 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));
    }
  }
}
Beispiel #3
0
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);
    }
  }  
}
Beispiel #4
0
#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");