diff options
Diffstat (limited to 'scene.c')
-rw-r--r-- | scene.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -12,11 +12,13 @@ static inline void link_object(space_t *s, object_t *o) } } -object_t *add_sphere(space_t *s, vector_t *c, COORD_T r) +object_t *add_sphere(space_t *s, vector_t *c, COORD_T r, material_t *m) { object_t *o = (object_t *) malloc(sizeof(object_t)); o->type = TYPE_SPHERE; + o->m = m; + o->sph.center = c; o->sph.radius = r; @@ -38,12 +40,12 @@ object_t *add_plane(space_t *s, vector_t *start, vector_t *dir) return o; } -light_t *add_light(space_t *s, vector_t *pos, color_t *c) +light_t *add_light(space_t *s, vector_t *pos, color_t *defuse) { light_t *o = (light_t *) malloc(sizeof(light_t)); o->pos = pos; - o->col = c; + o->defuse = defuse; if (s) { o->next = s->lights; @@ -54,3 +56,18 @@ light_t *add_light(space_t *s, vector_t *pos, color_t *c) return o; } + +void obj_norm_at(object_t *o, vector_t *dest, vector_t *point) +{ + switch(o->type) { + case TYPE_SPHERE: + vector_sub(dest, point, o->sph.center); + vector_scale_inv(dest, dest, vector_len(dest)); + break; + case TYPE_PLANE: + vector_copy(dest, o->pl.norm); + break; + } + + return; +} |