Exemplo n.º 1
0
static float RdToAlphap(float reflectance, float A) {
    float alphaLow = 0., alphaHigh = 1.f;
    float kd0 = RdIntegral(alphaLow, A);
    float kd1 = RdIntegral(alphaHigh, A);
    for (int i = 0; i < 16; ++i) {
        Assert(kd0 <= reflectance && kd1 >= reflectance);
        float alphaMid = (alphaLow + alphaHigh) * 0.5f;
        float kd = RdIntegral(alphaMid, A);
        if (kd < reflectance) { alphaLow = alphaMid;  kd0 = kd; }
        else                  { alphaHigh = alphaMid; kd1 = kd; }
    }
    return (alphaLow + alphaHigh) * 0.5f;
}
Exemplo n.º 2
0
static double RdToAlphap(double reflectance, double A) {
    double alphaLow = 0., alphaHigh = 1.f;
    double kd0 = RdIntegral(alphaLow, A);
    double kd1 = RdIntegral(alphaHigh, A);
    UNUSED(kd0);
    UNUSED(kd1);
    for (int i = 0; i < 16; ++i) {
        photonflowAssert(kd0 <= reflectance && kd1 >= reflectance);
        double alphaMid = (alphaLow + alphaHigh) * 0.5f;
        double kd = RdIntegral(alphaMid, A);
        if (kd < reflectance) { alphaLow = alphaMid;  kd0 = kd; }
        else                  { alphaHigh = alphaMid; kd1 = kd; }
    }
    return (alphaLow + alphaHigh) * 0.5f;
}