nuclear@0: #include nuclear@3: #include nuclear@2: #include nuclear@27: #include nuclear@2: #include nuclear@3: #ifndef __APPLE__ nuclear@3: #include nuclear@3: #else nuclear@3: #include nuclear@3: #endif nuclear@3: #include "rt.h" nuclear@12: #include "matrix.h" nuclear@22: #include "scene.h" nuclear@0: nuclear@3: void cleanup(); nuclear@3: void disp(); nuclear@3: void reshape(int x, int y); nuclear@3: void keyb(unsigned char key, int x, int y); nuclear@3: void mouse(int bn, int status, int x, int y); nuclear@3: void motion(int x, int y); nuclear@2: bool write_ppm(const char *fname, float *fb, int xsz, int ysz); nuclear@2: nuclear@3: static int xsz, ysz; nuclear@3: static bool need_update = true; nuclear@3: nuclear@8: static float cam_theta, cam_phi = 25.0; nuclear@8: static float cam_dist = 10.0; nuclear@8: nuclear@27: static bool dbg_glrender = true; nuclear@27: static bool dbg_show_kdtree = false; nuclear@27: static bool dbg_show_obj = true; nuclear@13: nuclear@13: static Scene scn; nuclear@12: nuclear@3: int main(int argc, char **argv) nuclear@0: { nuclear@3: glutInitWindowSize(800, 600); nuclear@3: glutInit(&argc, argv); nuclear@13: nuclear@13: int loaded = 0; nuclear@13: for(int i=1; i 89) cam_phi = 89; nuclear@8: nuclear@8: need_update = true; nuclear@8: glutPostRedisplay(); nuclear@8: } nuclear@8: if(bnstate[2]) { nuclear@8: cam_dist += dy * PAN_SCALE; nuclear@8: if(cam_dist < 0) cam_dist = 0; nuclear@8: nuclear@8: need_update = true; nuclear@8: glutPostRedisplay(); nuclear@8: } nuclear@2: } nuclear@2: nuclear@2: bool write_ppm(const char *fname, float *fb, int xsz, int ysz) nuclear@2: { nuclear@2: FILE *fp; nuclear@2: nuclear@2: if(!(fp = fopen(fname, "wb"))) { nuclear@2: fprintf(stderr, "write_ppm: failed to open file %s for writing: %s\n", fname, strerror(errno)); nuclear@2: return false; nuclear@2: } nuclear@2: fprintf(fp, "P6\n%d %d\n255\n", xsz, ysz); nuclear@2: nuclear@2: for(int i=0; i