9#ifndef PXR_IMAGING_PLUGIN_HD_EMBREE_PBRT_UTILS_H
10#define PXR_IMAGING_PLUGIN_HD_EMBREE_PBRT_UTILS_H
18PXR_NAMESPACE_OPEN_SCOPE
23constexpr T pi =
static_cast<T
>(M_PI);
28SphericalDirection(
float sinTheta,
float cosTheta,
float phi)
32 GfClamp(cosTheta, -1.0f, 1.0f));
38SampleUniformCone(
GfVec2f const& u,
float angle)
40 float cosAngle =
GfCos(angle);
41 float cosTheta = (1.0f - u[0]) + u[0] * cosAngle;
42 float sinTheta =
GfSqrt(
GfMax(0.0f, 1.0f - cosTheta*cosTheta));
43 float phi = u[1] * 2.0f * pi<float>;
44 return SphericalDirection(sinTheta, cosTheta, phi);
51InvUniformConePDF(
float angle)
53 return 2.0f * pi<float> * (1.0f -
GfCos(angle));
58PXR_NAMESPACE_CLOSE_SCOPE
Architecture-specific math function calls.
Basic type for a vector of 2 float components.
Basic type for a vector of 3 float components.
double GfCos(double v)
Return cos(v).
double GfClamp(double value, double min, double max)
Return the resulting of clamping value to lie between min and max.
double GfSqrt(double f)
Return sqrt(f).
T GfMax(T a1, T a2)
Returns the largest of the given values.
double GfSin(double v)
Return sin(v).