![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
#include "machine.h"#include "types.h"#include "macros.h"#include "vector.h"#include "intersect.h"#include "util.h"#include "ring.h"
Include dependency graph for ring.cpp:Go to the source code of this file.
Defines | |
| #define | RING_PRIVATE |
Functions | |
| object * | newring (void *tex, vector ctr, vector norm, flt inrad, flt outrad) |
| static int | ring_bbox (void *obj, vector *min, vector *max) |
| static void | ring_intersect (ring *rng, ray *ry) |
| static void | ring_normal (ring *rng, vector *pnt, ray *incident, vector *N) |
Variables | |
| static object_methods | ring_methods |
| #define RING_PRIVATE |
Definition at line 81 of file ring.cpp.
References ring_methods, and rt_getmem().
Referenced by rt_ring().
{
ring * r;
r=(ring *) rt_getmem(sizeof(ring));
memset(r, 0, sizeof(ring));
r->methods = &ring_methods;
r->tex = (texture *)tex;
r->ctr = ctr;
r->norm = norm;
r->inrad = inrad;
r->outrad= outrad;
return (object *) r;
}
| static void ring_intersect | ( | ring * | rng, |
| ray * | ry | ||
| ) | [static] |
Definition at line 110 of file ring.cpp.
References add_intersection(), ray::d, ray::o, Raypnt(), VDOT, VDot(), and VSUB.
{
flt d;
flt t,td;
vector hit, pnt;
d = -VDot(&(rng->ctr), &(rng->norm));
t=-(d+VDot(&(rng->norm), &(ry->o)));
td=VDot(&(rng->norm),&(ry->d));
if (td != 0.0) {
t= t / td;
if (t>=0.0) {
hit=Raypnt(ry, t);
VSUB(hit, rng->ctr, pnt);
VDOT(td, pnt, pnt);
td=sqrt(td);
if ((td > rng->inrad) && (td < rng->outrad))
add_intersection(t,(object *) rng, ry);
}
}
}
object_methods ring_methods [static] |
{
(void (*)(void *, void *))(ring_intersect),
(void (*)(void *, void *, void *, void *))(ring_normal),
ring_bbox,
free
}
Definition at line 74 of file ring.cpp.
Referenced by newring().
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.