#include #include "typedefs.h" #include "funcdefs.h" #include "globalvar.h" #define PI 3.14159261 #define DEGREETORADIAN(x) (x * PI / 180.0) int viewing(t_3d *scrnx, t_3d *scrny, t_3d *firstray) { t_3d gaze; double dist, magnitude; gaze.x = firstray->x = lookp.x - eyep.x; gaze.y = firstray->y = lookp.y - eyep.y; gaze.z = firstray->z = lookp.z - eyep.z; dist = normalize(&gaze); /* printf("dist = %f\n", dist); exit(0); */ crossp(scrnx, &gaze, &up); normalize(scrnx); crossp(scrny, scrnx, &gaze); normalize(scrny); magnitude = 2.0 * dist * tan(DEGREETORADIAN(hfov / 2.0)) / sizex; scrnx->x *= magnitude; scrnx->y *= magnitude; scrnx->z *= magnitude; magnitude = 2.0 * dist * tan(DEGREETORADIAN(vfov / 2.0)) / sizey; scrny->x *= magnitude; scrny->y *= magnitude; scrny->z *= magnitude; firstray->x += sizey / 2.0 * scrny->x - sizex / 2.0 * scrnx->x; firstray->y += sizey / 2.0 * scrny->y - sizex / 2.0 * scrnx->y; firstray->z += sizey / 2.0 * scrny->z - sizex / 2.0 * scrnx->z; return 0; }