home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RISC DISC 3
/
RISC_DISC_3.iso
/
resources
/
etexts
/
gems
/
gemsiii
/
luminaire
/
triangle_luminaire.
< prev
next >
Wrap
Text File
|
1992-03-20
|
1KB
|
38 lines
// ******************************************************************
//
// 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);