This is objdef.c in view mode; [Download] [Up]
/* * objdef.c * * Copyright (C) 1989, 1991, Craig E. Kolb * All rights reserved. * * This software may be freely copied, modified, and redistributed * provided that this copyright notice is preserved on all copies. * * You may not distribute this software, in whole or in part, as part of * any commercial product without the express consent of the authors. * * There is no warranty or other guarantee of fitness of this software * for any purpose. It is provided solely "as is". * * $Id$ * * $Log$ */ #include "rayshade.h" #include "options.h" #include "stats.h" static Object *Objects = NULL; /* named objects */ Object *World; /* top-level object */ /* * Return pointer to named object, NULL if no such object has been defined. */ Object * ObjectGetNamed(name) char *name; { Object *otmp; for (otmp = Objects; otmp; otmp = otmp->next) if (strcmp(name, otmp->name) == 0) return otmp; return (Object *)NULL; } /* * Add object to list of defined objects. At this point, the object has * been converted to the correct type, and obj->next is either NULL or * garbage. */ void ObjectAddToDefined(obj) Object *obj; { obj->next = Objects; Objects = obj; if (Options.verbose) AggregatePrintInfo(obj, Stats.fstats); else AggregatePrintInfo(obj, (FILE *)NULL); } /* * Return a copy of the named object. */ Object * ObjectCopyNamed(name) char *name; { Object *child; child = ObjectGetNamed(name); if (child == (Object *)NULL) RLerror(RL_PANIC, "There is no object named \"%s\".", name); return ObjectCopy(child); } void WorldSetup() { extern ObjList *Defstack; /* * Define and setup World object. */ World = Defstack->obj; /* World is topmost object on stack */ if (Defstack->next) RLerror(RL_ABORT, "Object def stack is screwey.\n"); /* * Efficiency hack: if World list consists of a single * object, with no textures or transformations, can * make World's one child be the World object. */ World->prims = AggregateConvert(World, World->next); ObjectBounds(World); /* * Complain if there are no primitives to be rendered. */ if (World->prims == 0) { RLerror(RL_PANIC, "Nothing to be rendered.\n"); } } int TraceRay(ray, hitlist, mindist, maxdist) Ray *ray; HitList *hitlist; Float mindist, *maxdist; { return intersect(World, ray, hitlist, mindist, maxdist); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.