#import "camera.h" #import "memory.h" #import "gl_headers.h" camera *new_camera(graphics_settings settings) { camera *new = autorelease(alloc(sizeof(camera))); new->eye = make_vector(0, 0, -10); new->focus = zero_vector; new->up = make_vector(0, 1, 0); return new; } void look_at_by_rotating(camera *c, vector what) { c->focus = what; } void look_at_by_translating(camera *c, vector what) { vector distance = vec_sub(what, c->focus); c->eye = vec_add(c->eye, distance); c->focus = what; } void move_eye(camera *c, vector delta) { c->eye = vec_add(c->eye, delta); } void move_focus(camera *c, vector delta) { look_at_by_rotating(c, vec_add(c->focus, delta)); } void move_camera(camera *c, vector delta) { look_at_by_translating(c, vec_add(c->focus, delta)); } void apply_camera(camera *c) { gluLookAt(UNPACK_VECTOR(c->eye), UNPACK_VECTOR(c->focus), UNPACK_VECTOR(c->up)); }