# [−][src]Trait tray_rust::geometry::Sampleable

Trait implemented by geometry that can sample a point on its surface

## Required methods

`fn sample_uniform(&self, samples: &(f32, f32)) -> (Point, Normal)`

Uniformly sample a position and normal on the surface using the samples passed

`fn sample(&self, p: &Point, samples: &(f32, f32)) -> (Point, Normal)`

Sample the object using the probability density of the solid angle
from `p`

to the sampled point on the surface.
Returns the sampled point and the surface normal at that point

`fn surface_area(&self) -> f32`

Return the surface area of the shape

`fn pdf(&self, p: &Point, w_i: &Vector) -> f32`

Compute the PDF that the ray from `p`

with direction `w_i`

intersects
the shape

## Implementors

`impl Sampleable for Disk`

[src]

`fn sample_uniform(&self, samples: &(f32, f32)) -> (Point, Normal)`

[src]

`fn sample(&self, _: &Point, samples: &(f32, f32)) -> (Point, Normal)`

[src]

`fn surface_area(&self) -> f32`

[src]

`fn pdf(&self, p: &Point, w_i: &Vector) -> f32`

[src]

`impl Sampleable for Rectangle`

[src]

`fn sample_uniform(&self, samples: &(f32, f32)) -> (Point, Normal)`

[src]

Uniform sampling for a rect is simple: just scale the two samples into the rectangle's space and return them as the x,y coordinates of the point chosen

`fn sample(&self, _: &Point, samples: &(f32, f32)) -> (Point, Normal)`

[src]

`fn surface_area(&self) -> f32`

[src]

Compute the sphere's surface area

`fn pdf(&self, p: &Point, w_i: &Vector) -> f32`

[src]

Compute the PDF that the ray from `p`

with direction `w_i`

intersects
the shape. This is the same as disk for computing PDF, we just use the
rectangle's surface area instead

`impl Sampleable for Sphere`

[src]

`fn sample_uniform(&self, samples: &(f32, f32)) -> (Point, Normal)`

[src]

`fn sample(&self, p: &Point, samples: &(f32, f32)) -> (Point, Normal)`

[src]

Sample the object using the probability density of the solid angle
from `p`

to the sampled point on the surface.
Returns the sampled point and the surface normal at that point

`fn surface_area(&self) -> f32`

[src]

Compute the sphere's surface area

`fn pdf(&self, p: &Point, _: &Vector) -> f32`

[src]

Compute the PDF that the ray from `p`

with direction `w_i`

intersects
the shape