/* plntest.c */ #include "ray.h" int main() { model_t mod; model_t *model = &mod; material_t *mat; object_t *obj1; object_t *obj2; char entity[16]; int count; /* Create lists */ model->mats = list_init(); model->objs = list_init(); /* Load the two material definitions */ count = fscanf(stdin, "%s", entity); material_init(stdin, model, 0); mat = (material_t *)list_get_entity(model->mats); assert(mat->cookie == MAT_COOKIE); fprintf(stderr, "loaded %s \n", mat->name); count = fscanf(stdin, "%s", entity); material_init(stdin, model, 0); mat = (material_t *)list_get_entity(model->mats); assert(mat->cookie == MAT_COOKIE); fprintf(stderr, "loaded %s \n", mat->name); /* Verify that worked */ material_list_print(model, stderr); /* Now load the two object definitions */ count = fscanf(stdin, "%s", entity); plane_init(stdin, model, 0); obj1 = (object_t *)list_get_entity(model->objs); assert(obj1->cookie == OBJ_COOKIE); fprintf(stderr, "loaded %s \n", obj1->obj_name); object_list_print(model, stderr); count = fscanf(stdin, "%s", entity); plane_init(stdin, model, 0); obj2 = (object_t *)list_get_entity(model->objs); assert(obj2->cookie == OBJ_COOKIE); fprintf(stderr, "loaded %s \n", obj2->obj_name); /* Verify that worked */ object_list_print(model, stderr); #if 0 /* Now test the hits functions */ vec_t view = {4.0, 3.0, 5.0}; vec_t dir = {0.0, 0.0, -1.0}; double dist = 0.0; vec_t unit; vec_unit(dir, unit); memset(obj1->hits, 0, sizeof(vec_t)); dist = obj1->hits(obj1, view, unit); fprintf(stderr, "dist to plane 1 %8.3lf \n", dist); vec_print(stderr, "hit point", obj1->last_hit); vec_unit(dir, unit); memset(obj2->hits, 0, sizeof(vec_t)); dist = obj2->hits(obj2, view, unit); fprintf(stderr, "dist to plane 2 %8.3lf \n", dist); vec_print(stderr, "hit point", obj2->last_hit); /* Make sure we dont get a hit in +z space */ dir[Y] = -2.1; vec_unit(dir, unit); memset(obj2->hits, 0, sizeof(vec_t)); dist = obj2->hits(obj2, view, unit); fprintf(stderr, "positive z test \n"); fprintf(stderr, "dist to plane 2 %8.3lf \n", dist); vec_print(stderr, "hit point", obj2->last_hit); /* Make sure we don't get a hit on a miss... Shoot */ /* straight down at backwall */ dir[Z] = 0; vec_unit(dir, unit); memset(obj1->hits, 0, sizeof(vec_t)); dist = obj1->hits(obj1, view, unit); fprintf(stderr, "vertical ray test \n"); fprintf(stderr, "dist to plane 1 %8.3lf \n", dist); vec_print(stderr, "hit point", obj1->last_hit); #endif return(0); }