2012-08-13 01:56:48 +00:00
|
|
|
#ifndef SPROUT_DARKROOM_MATERIALS_INTERPOLATION_HPP
|
|
|
|
#define SPROUT_DARKROOM_MATERIALS_INTERPOLATION_HPP
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
#include <sprout/config.hpp>
|
|
|
|
#include <sprout/darkroom/colors/rgb.hpp>
|
|
|
|
|
|
|
|
namespace sprout {
|
|
|
|
namespace darkroom {
|
|
|
|
namespace materials {
|
|
|
|
//
|
|
|
|
// interpolation_type
|
|
|
|
//
|
|
|
|
struct interpolation_type {
|
|
|
|
public:
|
|
|
|
enum values {
|
|
|
|
nearest_neighbor,
|
|
|
|
bilinear,
|
|
|
|
bicubic
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
//
|
|
|
|
// bilinear_interpolate
|
|
|
|
//
|
|
|
|
template<typename Color, typename Unit>
|
|
|
|
inline SPROUT_CONSTEXPR Color bilinear_interpolate(
|
|
|
|
Color const& c00, Color const& c01, Color const& c10, Color const& c11,
|
|
|
|
Unit const& u, Unit const& v
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return sprout::darkroom::colors::add(
|
|
|
|
sprout::darkroom::colors::mul(
|
|
|
|
sprout::darkroom::colors::add(
|
2012-08-13 14:55:30 +00:00
|
|
|
sprout::darkroom::colors::mul(c00, 1 - u),
|
|
|
|
sprout::darkroom::colors::mul(c01, u)
|
2012-08-13 01:56:48 +00:00
|
|
|
),
|
2012-08-13 14:55:30 +00:00
|
|
|
1 - v
|
2012-08-13 01:56:48 +00:00
|
|
|
),
|
|
|
|
sprout::darkroom::colors::mul(
|
|
|
|
sprout::darkroom::colors::add(
|
2012-08-13 14:55:30 +00:00
|
|
|
sprout::darkroom::colors::mul(c10, 1 - u),
|
|
|
|
sprout::darkroom::colors::mul(c11, u)
|
2012-08-13 01:56:48 +00:00
|
|
|
),
|
2012-08-13 14:55:30 +00:00
|
|
|
v
|
2012-08-13 01:56:48 +00:00
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} // namespace materials
|
|
|
|
} // namespace darkroom
|
|
|
|
} // namespace sprout
|
|
|
|
|
|
|
|
#endif // #ifndef SPROUT_DARKROOM_MATERIALS_INTERPOLATION_HPP
|