bool EquirectangularCamera::sampleDirection(PathSampleGenerator &sampler, const PositionSample &/*point*/, Vec2u pixel,
        DirectionSample &sample) const
{
    float pdf;
    Vec2f uv = (Vec2f(pixel) + 0.5f + _filter.sample(sampler.next2D(), pdf))*_pixelSize;

    float sinTheta;
    sample.d = uvToDirection(uv, sinTheta);
    sample.weight = Vec3f(1.0f);
    sample.pdf = INV_PI*INV_TWO_PI/sinTheta;

    return true;
}
Пример #2
0
bool CubemapCamera::sampleDirection(PathSampleGenerator &sampler, const PositionSample &/*point*/, Vec2u pixel,
        DirectionSample &sample) const
{
    Vec2f uv = (Vec2f(pixel) + 0.5f)*_pixelSize;

    int face;
    if (!uvToFace(uv, face))
        return false;

    float filterPdf;
    uv += _filter.sample(sampler.next2D(CameraSample), filterPdf)*_pixelSize;

    sample.d = uvToDirection(face, uv, sample.pdf);
    sample.weight = Vec3f(1.0f);

    return true;
}