1 #ifndef INCLUDE_AL_DIST_ATTEN_HPP
2 #define INCLUDE_AL_DIST_ATTEN_HPP
61 template <
class T =
float>
113 if (
dist <= mNear)
return T(1);
117 return dist < mFar ? T(1) - mScale * (
dist - mNear) : mFarBias;
120 return mNear / (mNear + mScale * (
dist - mNear));
123 T nearSqr = mNear * mNear;
124 return nearSqr / (nearSqr + mScale * (
dist *
dist - nearSqr));
141 mScale = (T(1) - mFarBias) / (mFar - mNear);
148 mScale = (mNear / T(0.25) - mNear) / (mFar - mNear);
151 T nearSqr = mNear * mNear;
152 mScale = (nearSqr / T(0.25 * 0.25) - nearSqr) / (mFar * mFar - nearSqr);
T farClip() const
Get far clip distance.
DistAtten & law(AttenuationLaw v)
Set attenuation law.
DistAtten & farBias(T v)
Set bias at far clip distance (linear model only)
T nearClip() const
Get near clip distance.
T attenuation(T dist) const
Get attenuation factor for a given distance.
DistAtten(T nearClip=T(0.1), T farClip=T(20), AttenuationLaw law=ATTEN_INVERSE, T farBias=T(0))
AttenuationLaw law() const
Get attenuation law.
DistAtten & nearClip(T v)
Set near clip distance.
T farBias() const
Get far bias.
DistAtten & farClip(T v)
Set far clip distance.
AttenuationLaw
Distance to attenuation laws.
T dist(const Vec< N, T > &a, const Vec< N, U > &b)
Returns distance between two vectors.