44 virtual float Evaluate(
float distance)
const = 0;
65 JPL_INLINE
float Evaluate(
float distance)
const final
80 return isMinMaxValid()
92 return isMinMaxValid()
103 return isMinMaxValid()
147 return a.Distance < b.Distance;
152 JPL_INLINE
float Evaluate(
float distance)
const final;
155 JPL_INLINE
float EvaluateFunction(
const Point& point,
float distance,
const Point* nextPoint)
const;
170 if (distance <=
Points.front().Distance)
172 const auto& point =
Points.front();
173 return EvaluateFunction(point, distance,
nullptr);
177 if (distance >=
Points.back().Distance)
181 const auto& point =
Points.back();
182 return EvaluateFunction(point, distance,
nullptr);
186 auto it = std::upper_bound(
Points.begin(),
Points.end(), distance, [](
float value,
const Point& point)
188 return value < point.Distance;
192 const auto& prevPoint = *(it - 1);
193 const Point* nextPoint = (it !=
Points.end()) ? &(*it) :
nullptr;
197 return EvaluateFunction(prevPoint, distance, nextPoint);
200 static JPL_INLINE
float ComputeAttenuation(
Curve::EType curveType,
float distance,
float distance0,
float distance1)
202 float t = (distance - distance0) / (distance1 - distance0);
203 t = std::clamp(t, 0.0f, 1.0f);
205 return EvaluateCurve(curveType, t);
208 JPL_INLINE
float AttenuationCurve::EvaluateFunction(
const Point& point,
float distance,
const Point* nextPoint)
const
213 const float amplitude = nextPoint->Value - point.Value;
214 return point.Value + amplitude * ComputeAttenuation(point.FunctionType, distance, point.Distance, nextPoint->Distance);
EType
Definition Curves.h:39
Definition AcousticMaterial.h:36
AttenuationModel
Definition DistanceAttenuation.h:33
@ None
Definition DistanceAttenuation.h:34
@ Linear
Definition DistanceAttenuation.h:36
@ Inverse
Definition DistanceAttenuation.h:35
@ _Count
Definition DistanceAttenuation.h:39
@ Exponential
Definition DistanceAttenuation.h:37
std::pmr::memory_resource * GetDefaultMemoryResource() noexcept
Definition Memory.h:42
Definition DistanceAttenuation.h:59
float Rolloff
Definition DistanceAttenuation.h:62
float MaxDistance
Definition DistanceAttenuation.h:61
float MinDistance
Definition DistanceAttenuation.h:60
Definition DistanceAttenuation.h:56
JPL_INLINE float Evaluate(float distance) const final
Definition DistanceAttenuation.h:65
AttenuationModel Model
Definition DistanceAttenuation.h:57
struct JPL::AttenuationBaseModel::DistanceAttenuationParameters Parameters
Definition DistanceAttenuation.h:124
float Distance
Definition DistanceAttenuation.h:130
float Value
Definition DistanceAttenuation.h:131
Curve::Point XY
Definition DistanceAttenuation.h:127
Curve::EType FunctionType
The function type to use from this point onward.
Definition DistanceAttenuation.h:136
Definition DistanceAttenuation.h:122
JPL_INLINE float Evaluate(float distance) const final
Evaluate curve at distance
Definition DistanceAttenuation.h:164
std::pmr::vector< Point > Points
Curve points that should sorted by distance.
Definition DistanceAttenuation.h:140
JPL_INLINE void SortPoints()
Sort curve points by distance. This should be called after changing Points.
Definition DistanceAttenuation.h:143
Definition DistanceAttenuation.h:43
virtual ~AttenuationFunction()=default
virtual float Evaluate(float distance) const =0