]>
Dogcows Code - chaz/rasterize/blob - plane.hh
3 * CS5600 University of Utah
5 * mcgarvey@eng.utah.edu
19 * A class for a plane object.
21 class plane
: public element
29 plane(vec_t n
, scal_t d
, color_t color
= COLOR_WHITE
) :
30 normal(n
), distance(d
), material(color
)
33 plane(vec_t p
, vec_t n
, color_t color
= COLOR_WHITE
) :
34 normal(vec_normalize(n
)), distance(-vec_dot(normal
, p
)), material(color
)
37 plane(vec_t a
, vec_t b
, vec_t c
, color_t color
= COLOR_WHITE
) :
38 normal(vec_normalize(vec_cross(vec_sub(b
, a
), vec_sub(c
, a
)))),
39 distance(-vec_dot(normal
, a
)), material(color
)
45 virtual bool intersect(ray_t ray
, contact_t
& hit
) const
47 // solve: [(ray.point + t*ray.direction) dot normal] + d = 0
49 scal_t denom
= vec_dot(ray
.d
, normal
);
51 // check for parallel condition
52 if (denom
== S(0.0)) {
53 if (scal_isequal(vec_dot(ray
.o
, normal
), -distance
)) {
57 return true; // the ray lies on the plane
59 return false; // no solution
62 scal_t numer
= vec_dot(ray
.o
, normal
) + distance
;
63 hit
.d
= -numer
/ denom
;
68 hit
.p
= ray_solve(ray
, hit
.d
);
69 if (S(0.0) <= numer
) {
73 hit
.n
= vec_neg(normal
);
78 virtual color_t
color(vec_t point
) const
86 * Destroy a new'd plane, releasing its memory.
89 void plane_destroy(plane
* p
)
This page took 0.041957 seconds and 4 git commands to generate.