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; }
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; }