Unresolved Object

template<IsSpectral TSpectral>
class UnresolvedObject : public huira::SceneObject<UnresolvedObject<TSpectral>, TSpectral>

Represents an unresolved object to be rendered.

UnresolvedObject serves as a base class for objects whose irradiance can be computed or updated based on light sources in the scene. Subclasses can override resolve_irradiance() to implement custom irradiance computation logic. This base class assumes that the object’s spectral irradiance is constant and does not depend on any observer or light positions.

Template Parameters:

TSpectral – The spectral representation type.

Subclassed by huira::UnresolvedAsteroid< TSpectral >, huira::UnresolvedEmitter< TSpectral >, huira::UnresolvedLambertianSphere< TSpectral >

Public Functions

UnresolvedObject() = default
UnresolvedObject(const units::SpectralWattsPerMeterSquared<TSpectral> &spectral_irradiance)

Constructs an UnresolvedObject with specified spectral irradiance.

Creates an unresolved object and initializes its spectral irradiance value. The provided irradiance is validated to ensure all components are non-negative and finite.

Parameters:

spectral_irradiance – The initial spectral irradiance in \(W \cdot m^{-2}\).

Throws:

std::runtime_error – if the irradiance contains invalid values.

UnresolvedObject(const units::WattsPerMeterSquared &irradiance)

Constructs an UnresolvedObject from total irradiance.

Creates an unresolved object with a total irradiance value that is distributed across spectral bins proportionally to their wavelength widths.

Parameters:

irradiance – The total irradiance in \(W \cdot m^{-2}\).

Throws:

std::runtime_error – if the irradiance is negative, NaN, or infinite.

UnresolvedObject(const UnresolvedObject&) = delete
UnresolvedObject &operator=(const UnresolvedObject&) = delete
void set_irradiance(const units::SpectralWattsPerMeterSquared<TSpectral> &spectral_irradiance)

Sets the spectral irradiance of the unresolved object.

Updates the object’s irradiance value. All spectral components must be non-negative, as negative irradiance is physically meaningless.

Parameters:

spectral_irradiance – The new spectral irradiance value in \(W \cdot m^{-2}\).

Throws:

std::runtime_error – if any irradiance component is negative.

void set_irradiance(const units::WattsPerMeterSquared &irradiance)

Sets the total irradiance of the unresolved object.

Updates the object’s irradiance by converting a total irradiance value (in watts per square meter) to the spectral representation. The total irradiance must be non-negative, as negative values are physically meaningless.

Parameters:

irradiance – The new total irradiance value in \(W \cdot m^{-2}\).

Throws:

std::runtime_error – if the total irradiance is negative, NaN, or infinite.

virtual TSpectral get_irradiance(Time time) const

Returns the spectral irradiance at a given time.

This method provides a hook for future derived classes to implement time-varying irradiance. The default implementation assumes irradiance is constant once computed or set.

Parameters:

time – The time at which to query irradiance (unused in default implementation).

Returns:

The current spectral irradiance value.

virtual void resolve_irradiance(const Transform<float> &self_transform, const std::vector<LightInstance<TSpectral>> &lights)

Resolves the spectral irradiance based on scene lights and object transform.

This method provides a hook for subclasses to compute or update the object’s irradiance based on its transform and the lights present in the scene. The default implementation does nothing, leaving the irradiance unchanged.

Parameters:
  • self_transform – The world-space transform of this object.

  • lights – A vector of all light instances in the scene.

inline virtual std::uint64_t id() const override

Get the object’s unique ID.

Returns:

std::uint64_t ID

inline virtual std::string type() const override

Get the object’s type string.

Returns:

std::string Type

inline bool is_scene_owned() const

Check if the object is owned by the scene.

Returns:

bool True if owned

inline void set_scene_owned(bool owned)

Set scene ownership flag.

Parameters:

owned – True if owned

inline std::string name() const

Get the object’s name.

Returns:

std::string Name

inline virtual std::string get_info() const

Get a descriptive info string for the object.

Returns:

std::string Info string

Protected Attributes

std::uint64_t id_ = 0
TSpectral irradiance_ = {0}

Protected Static Attributes

static std::uint64_t next_id_ = 0