spectrum.h File Reference
Description
Spectrum class with floating point elements and operations. See Spectrum Class.
Code Example
spectrum.h
/***************************************************************************************************
* Copyright 2024 NVIDIA Corporation. All rights reserved.
**************************************************************************************************/
#ifndef MI_MATH_SPECTRUM_H
#define MI_MATH_SPECTRUM_H
#include <mi/base/types.h>
#include <mi/math/assert.h>
#include <mi/math/function.h>
#include <mi/math/vector.h>
#include <mi/math/color.h>
namespace mi {
namespace math {
//------ Spectrum Class ---------------------------------------------------------
class Spectrum : public Spectrum_struct
{
public:
typedef Spectrum_struct
Pod_type;
typedef Spectrum_struct
storage_type;
typedef Float32
value_type;
typedef Size
size_type;
typedef Difference
difference_type;
typedef Float32 * pointer;
typedef const Float32 * const_pointer;
typedef Float32 & reference;
typedef const Float32 & const_reference;
static const Size
SIZE = 3;
static inline Size
size() { return SIZE; }
static inline Size
max_size() { return SIZE; }
inline Float32* begin() { return &c[0]; }
inline const Float32* begin() const { return &c[0]; }
inline Float32* end() { return begin() + SIZE; }
inline const Float32* end() const { return begin() + SIZE; }
inline Spectrum()
{
#ifndef NDEBUG
// In debug mode, default-constructed spectra are initialized with signaling NaNs or, if not
// applicable, with a maximum value to increase the chances of diagnosing incorrect use of
// an uninitialized spectrum.
typedef mi::base::numeric_traits< Float32> Traits;
Float32 v = (Traits::has_signaling_NaN)
? Traits::signaling_NaN() : Traits::max MI_PREVENT_MACRO_EXPAND ();
for( Size i = 0; i < SIZE; ++i)
c[i] = v;
#endif
}
#if (__cplusplus >= 201103L)
Spectrum( const Spectrum& s) = default;
Spectrum& operator=( const Spectrum& s) = default;
#endif
inline Spectrum( const Spectrum_struct& s)
{
for( Size i = 0; i < SIZE; ++i)
c[i] = s.c[i];
}
inline explicit Spectrum( const Float32 s)
{
for( Size i = 0; i < SIZE; ++i)
c[i] = s;
}
inline Spectrum( Float32 nr, Float32 ng, Float32 nb)
{
c[0] = nr;
c[1] = ng;
c[2] = nb;
}
inline explicit Spectrum( const Vector< Float32, 3>& v3)
{
c[0] = v3[0];
c[1] = v3[1];
c[2] = v3[2];
}
inline explicit Spectrum( const Vector< Float32, 4>& v4)
{
c[0] = v4[0];
c[1] = v4[1];
c[2] = v4[2];
}
inline explicit Spectrum( const Color& col)
{
c[0] = col.r;
c[1] = col.g;
c[2] = col.b;
}
inline Vector< Float32, 3>
to_vector3() const
{
Vector< Float32, 3> result;
result[0] = c[0];
result[1] = c[1];
result[2] = c[2];
return result;
}
inline Vector< Float32, 4>
to_vector4() const
{
Vector< Float32, 4> result;
result[0] = c[0];
result[1] = c[1];
result[2] = c[2];
result[3] = 1.0;
return result;
}
MI_HOST_DEVICE_INLINE const Float32& operator[]( Size i) const
{
mi_math_assert_msg( i < SIZE, "precondition");
return c[i];
}
MI_HOST_DEVICE_INLINE Float32& operator[]( Size i)
{
mi_math_assert_msg( i < SIZE, "precondition");
return c[i];
}
inline Float32 get( Size i) const
{
mi_math_assert_msg( i < SIZE, "precondition");
return c[i];
}
inline void set( Size i, Float32 value)
{
mi_math_assert_msg( i < SIZE, "precondition");
c[i] = value;
}
inline bool is_black() const
{
for( Size i = 0; i < SIZE; ++i)
if( c[i] != 0.0f)
return false;
return true;
}
inline Float32
linear_intensity() const
{
Float32 sum = 0.f;
for( Size i = 0; i < SIZE; ++i)
sum += c[i];
return sum / Float32( SIZE);
}
};
//------ Free comparison operators ==, !=, <, <=, >, >= for spectra ------------
inline bool operator==( const Spectrum& lhs, const Spectrum& rhs)
{
return is_equal( lhs, rhs);
}
inline bool operator!=( const Spectrum& lhs, const Spectrum& rhs)
{
return is_not_equal( lhs, rhs);
}
inline bool operator< ( const Spectrum& lhs, const Spectrum& rhs)
{
return lexicographically_less( lhs, rhs);
}
inline bool operator< =( const Spectrum& lhs, const Spectrum& rhs)
{
return lexicographically_less_or_equal( lhs, rhs);
}
inline bool operator>( const Spectrum& lhs, const Spectrum& rhs)
{
return lexicographically_greater( lhs, rhs);
}
inline bool operator>=( const Spectrum& lhs, const Spectrum& rhs)
{
return lexicographically_greater_or_equal( lhs, rhs);
}
//------ Free operators +=, -=, *=, /=, +, -, *, and / for spectra --------------
inline Spectrum& operator+=( Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
lhs[0] += rhs[0];
lhs[1] += rhs[1];
lhs[2] += rhs[2];
return lhs;
}
inline Spectrum& operator-=( Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
lhs[0] -= rhs[0];
lhs[1] -= rhs[1];
lhs[2] -= rhs[2];
return lhs;
}
inline Spectrum& operator*=( Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
lhs[0] *= rhs[0];
lhs[1] *= rhs[1];
lhs[2] *= rhs[2];
return lhs;
}
inline Spectrum& operator/=( Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
lhs[0] /= rhs[0];
lhs[1] /= rhs[1];
lhs[2] /= rhs[2];
return lhs;
}
inline Spectrum
operator+( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( lhs[0] + rhs[0], lhs[1] + rhs[1], lhs[2] + rhs[2]);
}
inline Spectrum
operator-( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( lhs[0] - rhs[0], lhs[1] - rhs[1], lhs[2] - rhs[2]);
}
inline Spectrum
operator*( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( lhs[0] * rhs[0], lhs[1] * rhs[1], lhs[2] * rhs[2]);
}
inline Spectrum
operator/( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( lhs[0] / rhs[0], lhs[1] / rhs[1], lhs[2] / rhs[2]);
}
inline Spectrum
operator-( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( -c[0], -c[1], -c[2]);
}
//------ Free operator *=, /=, *, and / definitions for scalars ---------------
inline Spectrum& operator*=( Spectrum& c, Float32 s)
{
mi_math_assert_msg( c.size() == 3, "precondition");
c[0] *= s;
c[1] *= s;
c[2] *= s;
return c;
}
inline Spectrum& operator/=( Spectrum& c, Float32 s)
{
mi_math_assert_msg( c.size() == 3, "precondition");
const Float32 f = 1.0f / s;
c[0] *= f;
c[1] *= f;
c[2] *= f;
return c;
}
inline Spectrum
operator*( const Spectrum& c, Float32 s)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( c[0] * s, c[1] * s, c[2] * s);
}
inline Spectrum
operator*( Float32 s, const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( s * c[0], s * c[1], s* c[2]);
}
inline Spectrum
operator/( const Spectrum& c, Float32 s)
{
mi_math_assert_msg( c.size() == 3, "precondition");
Float32 f = 1.0f / s;
return Spectrum( c[0] * f, c[1] * f, c[2] * f);
}
//------ Function Overloads for Spectrum Algorithms ------------------------------
inline Spectrum
abs( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( abs( c[0]), abs( c[1]), abs( c[2]));
}
inline Spectrum
acos( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( acos( c[0]), acos( c[1]), acos( c[2]));
}
inline bool all( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return (c[0] != 0.0f) && (c[1] != 0.0f) && (c[2] != 0.0f);
}
inline bool any( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return (c[0] != 0.0f) || (c[1] != 0.0f) || (c[2] != 0.0f);
}
inline Spectrum
asin( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( asin( c[0]), asin( c[1]), asin( c[2]));
}
inline Spectrum
atan( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( atan( c[0]), atan( c[1]), atan( c[2]));
}
inline Spectrum
atan2( const Spectrum& c, const Spectrum& d)
{
mi_math_assert_msg( c.size() == 3 && d.size() == 3, "precondition");
return Spectrum( atan2( c[0], d[0]), atan2( c[1], d[1]), atan2( c[2], d[2]));
}
inline Spectrum
ceil( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( ceil( c[0]), ceil( c[1]), ceil( c[2]));
}
inline Spectrum
clamp( const Spectrum& c, const Spectrum& low, const Spectrum& high)
{
mi_math_assert_msg( c.size() == 3, "precondition");
mi_math_assert_msg( low.size() == 3, "precondition");
mi_math_assert_msg( high.size() == 3, "precondition");
return Spectrum( clamp( c[0], low[0], high[0]),
clamp( c[1], low[1], high[1]),
clamp( c[2], low[2], high[2]));
}
inline Spectrum
clamp( const Spectrum& c, const Spectrum& low, Float32 high)
{
mi_math_assert_msg( c.size() == 3, "precondition");
mi_math_assert_msg( low.size() == 3, "precondition");
return Spectrum( clamp( c[0], low[0], high),
clamp( c[1], low[1], high),
clamp( c[2], low[2], high));
}
inline Spectrum
clamp( const Spectrum& c, Float32 low, const Spectrum& high)
{
mi_math_assert_msg( c.size() == 3, "precondition");
mi_math_assert_msg( high.size() == 3, "precondition");
return Spectrum( clamp( c[0], low, high[0]),
clamp( c[1], low, high[1]),
clamp( c[2], low, high[2]));
}
inline Spectrum
clamp( const Spectrum& c, Float32 low, Float32 high)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( clamp( c[0], low, high),
clamp( c[1], low, high),
clamp( c[2], low, high));
}
inline Spectrum
cos( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( cos( c[0]), cos( c[1]), cos( c[2]));
}
inline Spectrum
degrees( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( degrees( c[0]), degrees( c[1]), degrees( c[2]));
}
inline Spectrum
elementwise_max( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( base::max MI_PREVENT_MACRO_EXPAND ( lhs[0], rhs[0]),
base::max MI_PREVENT_MACRO_EXPAND ( lhs[1], rhs[1]),
base::max MI_PREVENT_MACRO_EXPAND ( lhs[2], rhs[2]));
}
inline Spectrum
elementwise_min( const Spectrum& lhs, const Spectrum& rhs)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return Spectrum( base::min MI_PREVENT_MACRO_EXPAND ( lhs[0], rhs[0]),
base::min MI_PREVENT_MACRO_EXPAND ( lhs[1], rhs[1]),
base::min MI_PREVENT_MACRO_EXPAND ( lhs[2], rhs[2]));
}
inline Spectrum
exp( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( exp( c[0]), exp( c[1]), exp( c[2]));
}
inline Spectrum
exp2( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( exp2( c[0]), exp2( c[1]), exp2( c[2]));
}
inline Spectrum
floor( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( floor( c[0]), floor( c[1]), floor( c[2]));
}
inline Spectrum
fmod( const Spectrum& a, const Spectrum& b)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( b.size() == 3, "precondition");
return Spectrum( fmod( a[0], b[0]), fmod( a[1], b[1]), fmod( a[2], b[2]));
}
inline Spectrum
fmod( const Spectrum& a, Float32 b)
{
mi_math_assert_msg( a.size() == 3, "precondition");
return Spectrum( fmod( a[0], b), fmod( a[1], b), fmod( a[2], b));
}
inline Spectrum
frac( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( frac( c[0]), frac( c[1]), frac( c[2]));
}
inline Spectrum
gamma_correction(
const Spectrum& spectrum,
Float32 gamma_factor)
{
mi_math_assert_msg( spectrum.size() == 3, "precondition");
mi_math_assert( gamma_factor > 0);
const Float32 f = Float32(1.0) / gamma_factor;
return Spectrum( fast_pow( spectrum[0], f),
fast_pow( spectrum[1], f),
fast_pow( spectrum[2], f));
}
inline bool is_approx_equal(
const Spectrum& lhs,
const Spectrum& rhs,
Float32 e)
{
mi_math_assert_msg( lhs.size() == 3, "precondition");
mi_math_assert_msg( rhs.size() == 3, "precondition");
return is_approx_equal( lhs[0], rhs[0], e)
&& is_approx_equal( lhs[1], rhs[1], e)
&& is_approx_equal( lhs[2], rhs[2], e);
}
inline Spectrum
lerp(
const Spectrum& c1,
const Spectrum& c2,
const Spectrum& t)
{
mi_math_assert_msg( c1.size() == 3, "precondition");
mi_math_assert_msg( c2.size() == 3, "precondition");
mi_math_assert_msg( t.size() == 3, "precondition");
return Spectrum( lerp( c1[0], c2[0], t[0]),
lerp( c1[1], c2[1], t[1]),
lerp( c1[2], c2[2], t[2]));
}
inline Spectrum
lerp(
const Spectrum& c1,
const Spectrum& c2,
Float32 t)
{
mi_math_assert_msg( c1.size() == 3, "precondition");
mi_math_assert_msg( c2.size() == 3, "precondition");
// equivalent to: return c1 * (Float32(1)-t) + c2 * t;
return Spectrum( lerp( c1[0], c2[0], t),
lerp( c1[1], c2[1], t),
lerp( c1[2], c2[2], t));
}
inline Spectrum
log( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( log( c[0]), log( c[1]), log( c[2]));
}
inline Spectrum
log2
MI_PREVENT_MACRO_EXPAND ( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( log2
MI_PREVENT_MACRO_EXPAND (c[0]),
log2
MI_PREVENT_MACRO_EXPAND (c[1]),
log2
MI_PREVENT_MACRO_EXPAND (c[2]));
}
inline Spectrum
log10( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( log10( c[0]), log10( c[1]), log10( c[2]));
}
inline Spectrum
modf( const Spectrum& c, Spectrum& i)
{
mi_math_assert_msg( c.size() == 3, "precondition");
mi_math_assert_msg( i.size() == 3, "precondition");
return Spectrum( modf( c[0], i[0]), modf( c[1], i[1]), modf( c[2], i[2]));
}
inline Spectrum
pow( const Spectrum& a, const Spectrum& b)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( b.size() == 3, "precondition");
return Spectrum( pow( a[0], b[0]), pow( a[1], b[1]), pow( a[2], b[2]));
}
inline Spectrum
pow( const Spectrum& a, Float32 b)
{
mi_math_assert_msg( a.size() == 3, "precondition");
return Spectrum( pow( a[0], b), pow( a[1], b), pow( a[2], b));
}
inline Spectrum
radians( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( radians( c[0]), radians( c[1]), radians( c[2]));
}
inline Spectrum
round( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( round( c[0]), round( c[1]), round( c[2]));
}
inline Spectrum
rsqrt( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( rsqrt( c[0]), rsqrt( c[1]), rsqrt( c[2]));
}
inline Spectrum
saturate( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( saturate( c[0]), saturate( c[1]), saturate( c[2]));
}
inline Spectrum
sign( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( sign( c[0]), sign( c[1]), sign( c[2]));
}
inline Spectrum
sin( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( sin( c[0]), sin( c[1]), sin( c[2]));
}
inline void sincos( const Spectrum& a, Spectrum& s, Spectrum& c)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( s.size() == 3, "precondition");
mi_math_assert_msg( c.size() == 3, "precondition");
sincos( a[0], s[0], c[0]);
sincos( a[1], s[1], c[1]);
sincos( a[2], s[2], c[2]);
}
inline Spectrum
smoothstep( const Spectrum& a, const Spectrum& b, const Spectrum& c)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( b.size() == 3, "precondition");
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( smoothstep( a[0], b[0], c[0]),
smoothstep( a[1], b[1], c[1]),
smoothstep( a[2], b[2], c[2]));
}
inline Spectrum
smoothstep( const Spectrum& a, const Spectrum& b, Float32 x)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( b.size() == 3, "precondition");
return Spectrum( smoothstep( a[0], b[0], x),
smoothstep( a[1], b[1], x),
smoothstep( a[2], b[2], x));
}
inline Spectrum
sqrt( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( sqrt( c[0]), sqrt( c[1]), sqrt( c[2]));
}
inline Spectrum
step( const Spectrum& a, const Spectrum& c)
{
mi_math_assert_msg( a.size() == 3, "precondition");
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( step( a[0], c[0]), step( a[1], c[1]), step( a[1], c[2]));
}
inline Spectrum
tan( const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return Spectrum( tan( c[0]), tan( c[1]), tan( c[2]));
}
inline bool isfinite
MI_PREVENT_MACRO_EXPAND (const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return isfinite
MI_PREVENT_MACRO_EXPAND (c[0])
&& isfinite
MI_PREVENT_MACRO_EXPAND (c[1])
&& isfinite
MI_PREVENT_MACRO_EXPAND (c[2]);
}
inline bool isinfinite
MI_PREVENT_MACRO_EXPAND (const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return isinfinite
MI_PREVENT_MACRO_EXPAND (c[0])
|| isinfinite
MI_PREVENT_MACRO_EXPAND (c[1])
|| isinfinite
MI_PREVENT_MACRO_EXPAND (c[2]);
}
inline bool isnan
MI_PREVENT_MACRO_EXPAND (const Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
return isnan
MI_PREVENT_MACRO_EXPAND (c[0])
|| isnan
MI_PREVENT_MACRO_EXPAND (c[1])
|| isnan
MI_PREVENT_MACRO_EXPAND (c[2]);
}
MI_HOST_DEVICE_INLINE void to_rgbe( const Spectrum& c, Uint32& rgbe)
{
mi_math_assert_msg( c.size() == 3, "precondition");
to_rgbe( &c[0], rgbe);
}
MI_HOST_DEVICE_INLINE void to_rgbe( const Spectrum& c, Uint8 rgbe[4])
{
mi_math_assert_msg( c.size() == 3, "precondition");
to_rgbe( &c[0], rgbe);
}
MI_HOST_DEVICE_INLINE void from_rgbe( const Uint8 rgbe[4], Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
from_rgbe( rgbe, &c[0]);
}
MI_HOST_DEVICE_INLINE void from_rgbe( const Uint32 rgbe, Spectrum& c)
{
mi_math_assert_msg( c.size() == 3, "precondition");
from_rgbe( rgbe, &c[0]);
}
// end group mi_math_spectrum
} // namespace math
} // namespace mi
#endif // MI_MATH_SPECTRUM_H
Namespaces
- namespace
- Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH. More...
- namespace
- Namespace for the Math API. More...
Classes
- class
- Spectrum with floating point elements and operations. More...
Functions
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise absolute values of the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise arc cosine of the spectrum c. More...
- bool ( const Spectrum& c)
- Returns true if all elements of c are not equal to zero. More...
- bool ( const Spectrum& c)
- Returns true if any element of c is not equal to zero. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise arc sine of the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise arc tangent of the spectrum c. More...
- Spectrum ( const Spectrum& c, const Spectrum& d)
- Returns a spectrum with the elementwise arc tangent of the spectrum c / d. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise smallest integral value that is not less than the element in spectrum c. More...
- Spectrum ( const Spectrum& c, const Spectrum& low, const Spectrum& high)
- Returns the spectrum c elementwise clamped to the range [low, high]. More...
- Spectrum ( const Spectrum& c, const Spectrum& low, Float32 high)
- Returns the spectrum c elementwise clamped to the range [low, high]. More...
- Spectrum ( const Spectrum& c, Float32 low, const Spectrum& high)
- Returns the spectrum c elementwise clamped to the range [low, high]. More...
- Spectrum ( const Spectrum& c, Float32 low, Float32 high)
- Returns the spectrum c elementwise clamped to the range [low, high]. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise cosine of the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Converts elementwise radians in c to degrees. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Returns elementwise max for each element in spectrum lhs that is less than the corresponding element in spectrum rhs. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Returns elementwise min for each element in spectrum lhs that is less than the corresponding element in spectrum rhs. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with elementwise e to the power of the element in the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with elementwise 2 to the power of the element in the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise largest integral value that is not greater than the element in spectrum c. More...
- Spectrum ( const Spectrum& a, const Spectrum& b)
- Returns elementwise a modulo b, in other words, the remainder of a/b. More...
- Spectrum ( const Spectrum& a, Float32 b)
- Returns elementwise a modulo b, in other words, the remainder of a/b. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise positive fractional part of the spectrum c. More...
- MI_HOST_DEVICE_INLINE void ( const Uint8 rgbe[4], Spectrum& c)
- Decodes a color from RGBE representation. More...
- MI_HOST_DEVICE_INLINE void ( const Uint32 rgbe, Spectrum& c)
- Decodes a color from RGBE representation. More...
- Spectrum ( const Spectrum& spectrum, Float32 gamma_factor)
- Returns a gamma corrected spectrum. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs, Float32 e)
- Compares the two given values elementwise for equality within the given epsilon. More...
- bool ( const Spectrum& c)
- Indicates whether all components of the spectrum are finite. More...
- bool ( const Spectrum& c)
- Indicates whether any component of the spectrum is infinite. More...
- bool ( const Spectrum& c)
- Indicates whether any component of the spectrum is "not a number". More...
- Spectrum ( const Spectrum& c1, const Spectrum& c2, const Spectrum& t)
- Returns the elementwise linear interpolation between c1 and c2, i.e., it returns (1-t) * c1 + t * c2. More...
- Spectrum ( const Spectrum& c1, const Spectrum& c2, Float32 t)
- Returns the linear interpolation between c1 and c2, i.e., it returns (1-t) * c1 + t * c2. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with elementwise natural logarithm of the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with elementwise base 10 logarithm of the spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with elementwise base 2 logarithm of the spectrum c. More...
- Spectrum ( const Spectrum& c, Spectrum& i)
- Returns the elementwise fractional part of c and stores the elementwise integral part of c in i. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is elementwise not equal to rhs. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Multiplies rhs elementwise with lhs and returns the new result. More...
- Spectrum ( const Spectrum& c, Float32 s)
- Multiplies the spectrum c elementwise with the scalar s and returns the new result. More...
- Spectrum ( Float32 s, const Spectrum& c)
- Multiplies the spectrum c elementwise with the scalar s and returns the new result. More...
- Spectrum& ( Spectrum& lhs, const Spectrum& rhs)
- Multiplies rhs elementwise with lhs and returns the modified lhs. More...
- Spectrum& ( Spectrum& c, Float32 s)
- Multiplies the spectrum c elementwise with the scalar s and returns the modified spectrum c. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Adds lhs and rhs elementwise and returns the new result. More...
- Spectrum& ( Spectrum& lhs, const Spectrum& rhs)
- Adds rhs elementwise to lhs and returns the modified lhs. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Subtracts rhs elementwise from lhs and returns the new result. More...
- Spectrum ( const Spectrum& c)
- Negates the spectrum c elementwise and returns the new result. More...
- Spectrum& ( Spectrum& lhs, const Spectrum& rhs)
- Subtracts rhs elementwise from lhs and returns the modified lhs. More...
- Spectrum ( const Spectrum& lhs, const Spectrum& rhs)
- Divides rhs elementwise by lhs and returns the new result. More...
- Spectrum ( const Spectrum& c, Float32 s)
- Divides the spectrum c elementwise by the scalar s and returns the new result. More...
- Spectrum& ( Spectrum& lhs, const Spectrum& rhs)
- Divides lhs elementwise by rhs and returns the modified lhs. More...
- Spectrum& ( Spectrum& c, Float32 s)
- Divides the spectrum c elementwise by the scalar s and returns the modified spectrum c. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is lexicographically less than rhs. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is lexicographically less than or equal to rhs. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is elementwise equal to rhs. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is lexicographically greater than rhs. More...
- bool ( const Spectrum& lhs, const Spectrum& rhs)
- Returns true if lhs is lexicographically greater than or equal to rhs. More...
- Spectrum ( const Spectrum& a, const Spectrum& b)
- Returns the spectrum a elementwise to the power of b. More...
- Spectrum ( const Spectrum& a, Float32 b)
- Returns the spectrum a elementwise to the power of b. More...
- Spectrum ( const Spectrum& c)
- Converts elementwise degrees in c to radians. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elements of spectrum c rounded to nearest integers. More...
- Spectrum ( const Spectrum& c)
- Returns the reciprocal of the square root of each element of c. More...
- Spectrum ( const Spectrum& c)
- Returns the spectrum c clamped elementwise to the range [0,1]. More...
- Spectrum ( const Spectrum& c)
- Returns the elementwise sign of spectrum c. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise sine of the spectrum c. More...
- void ( const Spectrum& a, Spectrum& s, Spectrum& c)
- Computes elementwise the sine s and cosine c of angles a simultaneously. More...
- Spectrum ( const Spectrum& a, const Spectrum& b, const Spectrum& c)
- Returns 0 if c is less than a and 1 if c is greater than b in an elementwise fashion. More...
- Spectrum ( const Spectrum& a, const Spectrum& b, Float32 x)
- Returns 0 if c is less than a and 1 if c is greater than b in an elementwise fashion. More...
- Spectrum ( const Spectrum& c)
- Returns the square root of each element of c. More...
- Spectrum ( const Spectrum& a, const Spectrum& c)
- Returns elementwise 0 if c is less than a and 1 otherwise. More...
- Spectrum ( const Spectrum& c)
- Returns a spectrum with the elementwise tangent of the spectrum c. More...
- MI_HOST_DEVICE_INLINE void ( const Spectrum& c, Uint32& rgbe)
- Encodes a spectrum into RGBE representation. More...
- MI_HOST_DEVICE_INLINE void ( const Spectrum& c, Uint8 rgbe[4])
- Encodes a spectrum into RGBE representation. More...