#[derive(Debug, Clone, Copy, PartialEq)]
pub struct StellarMaterial {
pub emission_color: [f32; 3],
pub emission_intensity: f32,
pub temperature_k: f32,
pub opacity: f32,
}
impl StellarMaterial {
pub fn photosphere() -> Self {
Self {
emission_color: [1.0, 0.95, 0.8],
emission_intensity: 100.0,
temperature_k: 5778.0,
opacity: 1.0,
}
}
pub fn chromosphere() -> Self {
Self {
emission_color: [1.0, 0.3, 0.2],
emission_intensity: 0.5,
temperature_k: 10000.0,
opacity: 0.05,
}
}
pub fn corona() -> Self {
Self {
emission_color: [0.9, 0.95, 1.0],
emission_intensity: 0.01,
temperature_k: 1_000_000.0,
opacity: 0.002,
}
}
pub fn sunspot() -> Self {
Self {
emission_color: [0.6, 0.3, 0.1],
emission_intensity: 40.0,
temperature_k: 3500.0,
opacity: 1.0,
}
}
pub fn prominence() -> Self {
Self {
emission_color: [1.0, 0.4, 0.3],
emission_intensity: 2.0,
temperature_k: 8000.0,
opacity: 0.15,
}
}
pub fn planck_peak_wavelength_nm(&self) -> f32 {
2_897_771.955 / self.temperature_k
}
pub fn luminous_exitance(&self) -> f64 {
5.670374419e-8 * (self.temperature_k as f64).powi(4)
}
}