// doubleのRGB要素を.hdrフォーマット用に変換 HDRPixel get_hdr_pixel(const Color &color) { double d = std::max(color.x, std::max(color.y, color.z)); if (d <= 1e-32) return HDRPixel(); int e; double m = frexp(d, &e); // d = m * 2^e d = m * 256.0 / d; return HDRPixel(color.x * d, color.y * d, color.z * d, e + 128); }
// doubleのRGB要素を.hdrフォーマット用に変換 HDRPixel get_hdr_pixel(const Color &color) { double d = max(color.x, max(color.y, color.z)); if (d <= 1e-32){ return HDRPixel(); } int e; double m = frexp(d, &e); // d = m * 2^e d = m * 256.0 / d; return HDRPixel((unsigned char)(color.x*d), (unsigned char)(color.y*d), (unsigned char)(color.z*d), e + 128); }