JPL Spatial
Sound spatialization and propagation library
Loading...
Searching...
No Matches
JPL::OctahedronEncoding< Precision > Class Template Reference

Forward declaration. More...

#include <JPLSpatial/Math/DirectionEncoding.h>

Public Types

using EncodedType = typename Precision::EncodedType
 
using FloatType = std::conditional_t<(Precision::cBitsPerAxis > 23), double, float >
 

Static Public Member Functions

template<CVec3 Vec3>
static constexpr EncodedType Encode (const Vec3 &direction)
 
static simd_mask Encode (const simd &dirX, const simd &dirY, const simd &dirZ)
 
template<CVec3 Vec3>
static constexpr Vec3 Decode (EncodedType encodedDirection)
 
static void Decode (const simd_mask &encodedDirection, simd &outX, simd &outY, simd &outZ)
 
template<std::integral T>
static JPL_INLINE constexpr bool IsValidCode (T code) noexcept
 
template<std::integral T>
static JPL_INLINE constexpr bool AreValidComponents (T x, T y) noexcept
 
template<std::integral T>
static JPL_INLINE constexpr EncodedType CombineComponents (T x, T y) noexcept
 
template<std::integral T>
static JPL_INLINE constexpr auto SanitizeCode (T code) noexcept
 Alias the padding rim to the last real texel.
 

Static Public Attributes

static constexpr auto cBitsPerAxis = Precision::cBitsPerAxis
 
static constexpr EncodedType cAxisMask = static_cast<EncodedType>((1llu << cBitsPerAxis) - 1u)
 
static constexpr size_t cAxisRange = cAxisMask + 1
 
static constexpr auto cMaxComponentError = Octahedron::cMaxComponentError<cBitsPerAxis>
 
static constexpr auto cMaxVectorError = Octahedron::cMaxVectorError<cBitsPerAxis>
 

Detailed Description

template<Octahedron::CPrecision Precision>
class JPL::OctahedronEncoding< Precision >

Forward declaration.

Static utility class for octahedral encoding of a direction vector in 3D space.

Member Typedef Documentation

◆ EncodedType

template<Octahedron::CPrecision Precision>
using JPL::OctahedronEncoding< Precision >::EncodedType = typename Precision::EncodedType

◆ FloatType

template<Octahedron::CPrecision Precision>
using JPL::OctahedronEncoding< Precision >::FloatType = std::conditional_t<(Precision::cBitsPerAxis > 23), double, float>

Member Function Documentation

◆ AreValidComponents()

template<Octahedron::CPrecision Precision>
template<std::integral T>
JPL_INLINE constexpr bool JPL::OctahedronEncoding< Precision >::AreValidComponents ( x,
y 
)
staticconstexprnoexcept

Check if 'x' and 'y' components' can produce a valid code, taking into acount padding rim.

◆ CombineComponents()

template<Octahedron::CPrecision Precision>
template<std::integral T>
JPL_INLINE constexpr OctahedronEncoding< Precision >::EncodedType JPL::OctahedronEncoding< Precision >::CombineComponents ( x,
y 
)
staticconstexprnoexcept

Combine encoded 'x' and 'y' components into a valid code, sanitizing if necessary.

◆ Decode() [1/2]

template<Octahedron::CPrecision Precision>
requires (sizeof(EncodedType) <= sizeof(uint32))
void JPL::OctahedronEncoding< Precision >::Decode ( const simd_mask encodedDirection,
simd outX,
simd outY,
simd outZ 
)
static

◆ Decode() [2/2]

template<Octahedron::CPrecision Precision>
template<CVec3 Vec3>
constexpr Vec3 JPL::OctahedronEncoding< Precision >::Decode ( EncodedType  encodedDirection)
staticconstexpr

Decodes octahedron encoded direction back to a vector. This reverses the operation performed by Encode.

Parameters
encodedDirection: the octahedron integer to be decoded back to a direction vector.
Returns
: direction vector represented by the input octahedron.

◆ Encode() [1/2]

template<Octahedron::CPrecision Precision>
requires (sizeof(EncodedType) <= sizeof(uint32))
simd_mask JPL::OctahedronEncoding< Precision >::Encode ( const simd dirX,
const simd dirY,
const simd dirZ 
)
inlinestatic

◆ Encode() [2/2]

template<Octahedron::CPrecision Precision>
template<CVec3 Vec3>
constexpr OctahedronEncoding< Precision >::EncodedType JPL::OctahedronEncoding< Precision >::Encode ( const Vec3 &  direction)
staticconstexpr

Encodes a direction vector into octahedron.

Parameters
direction: direction vector to be encoded, must be normalized and non-zero
Returns
: integer encoded representation of the input direction vector

◆ IsValidCode()

template<Octahedron::CPrecision Precision>
template<std::integral T>
JPL_INLINE constexpr bool JPL::OctahedronEncoding< Precision >::IsValidCode ( code)
staticconstexprnoexcept

Check if 'code' falls within valid range of the encoder's precision, taking into acount padding rim.

◆ SanitizeCode()

template<Octahedron::CPrecision Precision>
template<std::integral T>
JPL_INLINE constexpr auto JPL::OctahedronEncoding< Precision >::SanitizeCode ( code)
staticconstexprnoexcept

Alias the padding rim to the last real texel.

Member Data Documentation

◆ cAxisMask

template<Octahedron::CPrecision Precision>
constexpr EncodedType JPL::OctahedronEncoding< Precision >::cAxisMask = static_cast<EncodedType>((1llu << cBitsPerAxis) - 1u)
staticconstexpr

◆ cAxisRange

template<Octahedron::CPrecision Precision>
constexpr size_t JPL::OctahedronEncoding< Precision >::cAxisRange = cAxisMask + 1
staticconstexpr

◆ cBitsPerAxis

template<Octahedron::CPrecision Precision>
constexpr auto JPL::OctahedronEncoding< Precision >::cBitsPerAxis = Precision::cBitsPerAxis
staticconstexpr

◆ cMaxComponentError

template<Octahedron::CPrecision Precision>
constexpr auto JPL::OctahedronEncoding< Precision >::cMaxComponentError = Octahedron::cMaxComponentError<cBitsPerAxis>
staticconstexpr

◆ cMaxVectorError

template<Octahedron::CPrecision Precision>
constexpr auto JPL::OctahedronEncoding< Precision >::cMaxVectorError = Octahedron::cMaxVectorError<cBitsPerAxis>
staticconstexpr

The documentation for this class was generated from the following file: