home *** CD-ROM | disk | FTP | other *** search
- // ******************************************************************
- //
- // Physically Correct Direct Lighting For Distribution Ray Tracing
- // by Changyaw Wang
- //
- // triangle_luminaire.c
- //
- // ******************************************************************
-
- #include "utility.h"
-
- // Selects a point visible from x given (r1,r2).
- // Here, visible means not SELF-shadowed.
-
- void triangle::select_visible_point(
- const point& x, // viewpoint
- const double r1, // random number
- const double r2, // random number
- point& on_light, // point corresponding to (r1,r2)
- double& prob) // probability of selecting on_light
- {
- point pt, pt1, pt2, pt3;
- vector v1, v2, v3, psi, temp1, temp2;
- double u, v, area;
-
- v1 = p1 - x;
- v1.normalize();
- pt1 = x + v1;
- v2 = p2 - x;
- v2.normalize();
- pt2 = x + v2;
- v3 = p3 - x;
- v3.normalize();
- pt3 = x + v3;
- u = 1.0 - sqrt(1.0 - r1);
- v = r2 * sqrt(1.0 - r1);
-
-