コード例 #1
0
void BlackbodyNormalized(const float *lambda, int n, float T, float *Le) {
    Blackbody(lambda, n, T, Le);
    // Normalize _Le_ values based on maximum blackbody radiance
    float lambdaMax = 2.8977721e-3f / T * 1e9f;
    float maxL;
    Blackbody(&lambdaMax, 1, T, &maxL);
    for (int i = 0; i < n; ++i) Le[i] /= maxL;
}
コード例 #2
0
void ParamSet::AddBlackbodySpectrum(const string &name, const float *data,
        int nItems) {
    EraseSpectrum(name);
    Assert(nItems % 2 == 0); // temperature (K), scale, ...
    nItems /= 2;
    Spectrum *s = new Spectrum[nItems];
    float *v = new float[nCIESamples];
    for (int i = 0; i < nItems; ++i) {
        Blackbody(CIE_lambda, nCIESamples, data[2*i], v);
        s[i] = data[2*i+1] * Spectrum::FromSampled(CIE_lambda, v, nCIESamples);
    }
    spectra.push_back(new ParamSetItem<Spectrum>(name, s, nItems));
    delete[] s;
    delete[] v;
}