Use <DDImage/DDMath.h> instead of <math.h> to make portable programs. More...
Defines | |
#define | rintf(v) |
#define | M_PI_F |
#define | M_PI_2_F |
#define | M_PI_4_F |
#define | M_1_PI_F |
#define | M_2_PI_F |
#define | M_SQRT2_F |
#define | M_SQRT1_2_F |
#define | iman_ |
#define | mFnVolatile |
#define | INFINITY |
#define | NAN |
Functions | |
mFnAssertStatic (sizeof(int)==4) | |
long | fast_rint (double val) |
long | fast_floor (double val) |
double | radians (double degrees) |
float | radiansf (float degrees) |
double | degrees (double radians) |
float | degreesf (float radians) |
template<class Type > | |
Type | MIN (const Type &a, const Type &b) |
template<class Type > | |
Type | MAX (const Type &a, const Type &b) |
template<class Type , class Typeb > | |
Type | clamp (Type a, Typeb b, Typeb c) |
template<class Type > | |
Type | clamp (Type a) |
template<class Type , class Typeb > | |
bool | step (Type a, Typeb x) |
template<class Type , class Typeb > | |
Type | smoothstep (Type a, Type b, Typeb x) |
template<class Type , class Typeb > | |
Type | lerp (Type a, Type b, Typeb x) |
Use <DDImage/DDMath.h> instead of <math.h> to make portable programs.
This header file only contains inline functions and thus can be used in any code, whether or not it is linked with the DDImage library. It's primary purpose is to fix deficiencies in various platforms math header files.
See also <noise.h>
long fast_rint | ( | double | val | ) | [inline] |
Fast version of (int)rint(). Works for -2147483648.5 .. 2147483647.49975574019, Requires IEEE floating point.
Referenced by DD::Image::LUT::fillToTable(), DD::Image::Format::from_uv_centre(), DD::Image::Filter::get(), DD::Image::Linear::to_byte(), DD::Image::ProxyContext::to_proxy(), DD::Image::ProxyContext::to_proxy_rel(), and DD::Image::Linear::to_short().
long fast_floor | ( | double | val | ) | [inline] |
Fast version of (int)floor(). Works for -32728 to 32727.99999236688, rounds numbers greater than n.9999923668 to n+1 rather than n. Requires IEEE floating point.
This doesn't work for numbers outside the bounds, but is 4x faster than standard floor within those bounds. Adding this bounds check doesn't seem to affect its performance, so this allows us to keep using the function
Referenced by DD::Image::Render::_request(), DD::Image::Iop::do_sample_shadowmap(), DD::Image::LightOp::get_shadowing(), DD::Image::rTriangle::intersect_scanline(), and DD::Image::Transform::motionBlurSample().
double radians | ( | double | degrees | ) | [inline] |
Convert degrees to radians.
Referenced by DD::Image::ComplexLightOp::_validate(), and DD::Image::CameraOp::projection().
float radiansf | ( | float | degrees | ) | [inline] |
Convert degrees to radians, returns a float.
double degrees | ( | double | radians | ) | [inline] |
Convert radians to degrees.
float degreesf | ( | float | radians | ) | [inline] |
Convert radians to degrees, returns a float.
Type MIN | ( | const Type & | a, |
const Type & | b | ||
) | [inline] |
Takes the minimum of two things with a '<' operator. Returns b if either a or b is NaN. The function name is uppercase to avoid collisions with the many vender header files that define a macro or other template called min().
Referenced by DD::Image::DrawIop::_validate(), DD::Image::Render::draw_primitives(), DD::Image::Box3::expand(), DD::Image::rTriangle::intersect_dist_squared(), DD::Image::Box::merge(), DD::Image::Transform::motionBlurSample(), DD::Image::ChannelSet::operator&(), DD::Image::ChannelSet::operator&=(), DD::Image::ChannelSet::operator+=(), DD::Image::ChannelSet::operator-=(), DD::Image::Row::range(), DD::Image::Iop::request(), and DD::Image::Scene::validate().
Type MAX | ( | const Type & | a, |
const Type & | b | ||
) | [inline] |
Takes the maximum of two things with a '<' operator. Returns b if either a or b is NaN. The function name is uppercase to avoid collisions with the many vender header files that define a macro or other template called max().
Referenced by DD::Image::Render::_validate(), DD::Image::DrawIop::_validate(), DD::Image::Quadtree< unsigned >::add(), DD::Image::Render::draw_primitives(), DD::Image::Box3::expand(), DD::Image::NukeWrapper::maximum_inputs(), DD::Image::Box::merge(), DD::Image::NukeWrapper::NukeWrapper(), DD::Image::Row::range(), DD::Image::Iop::request(), and DD::Image::Scene::validate().
Type clamp | ( | Type | a, |
Typeb | b, | ||
Typeb | c | ||
) | [inline] |
Restricts a to the range b through c for any type with a '<' operator. Returns b if either a or b or c is NaN.
Referenced by DD::Image::ComplexLightOp::_validate(), DD::Image::LightOp::get_shadowing(), DD::Image::RenderScene::inputContext(), DD::Image::DrawIop::pixel_engine(), and DD::Image::Scene::validate().
Type clamp | ( | Type | a | ) | [inline] |
Same as clamp(a,0,1)
bool step | ( | Type | a, |
Typeb | x | ||
) | [inline] |
Returns 0 if x is less than a, returns 1 otherwise. Matches the function in RenderMan and other shading languages.
Referenced by DD::Image::Transform::append().
Type smoothstep | ( | Type | a, |
Type | b, | ||
Typeb | x | ||
) | [inline] |
Returns 0 if x is less than a, returns 1 if x is greater or equal to b, returns a smooth cubic interpolation otherwise. Matches the function in RenderMan and other shading languages.
Type lerp | ( | Type | a, |
Type | b, | ||
Typeb | x | ||
) | [inline] |
Returns a point on the line f(x) where f(0)==a and f(1)==b. Matches the function in RenderMan and other shading languages.
Referenced by DD::Image::NukeWrapper::uses_input().