jupiters 0.0.2

Jupiter celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
pub struct ShaderData {
    pub name: String,
    pub uniforms: Vec<ShaderUniform>,
}

#[derive(Debug, Clone)]
pub enum UniformValue {
    Float(f32),
    Vec3([f32; 3]),
    Vec4([f32; 4]),
    Mat4([[f32; 4]; 4]),
    Int(i32),
}

#[derive(Debug, Clone)]
pub struct ShaderUniform {
    pub name: String,
    pub value: UniformValue,
}

impl ShaderData {
    pub fn terrain() -> Self {
        Self {
            name: "cloudtoppbr".to_string(),
            uniforms: vec![
                ShaderUniform {
                    name: "usundirection".into(),
                    value: UniformValue::Vec3([0.0, 1.0, 0.0]),
                },
                ShaderUniform {
                    name: "ucamerapos".into(),
                    value: UniformValue::Vec3([0.0, 0.0, 0.0]),
                },
                ShaderUniform {
                    name: "uplanetradius".into(),
                    value: UniformValue::Float(crate::JUPITEREQUATORIALRADIUS as f32),
                },
                ShaderUniform {
                    name: "uatmosphereheight".into(),
                    value: UniformValue::Float(1000000.0),
                },
            ],
        }
    }

    pub fn atmosphere() -> Self {
        Self {
            name: "jupiterscattering".to_string(),
            uniforms: vec![
                ShaderUniform {
                    name: "urayleighcoeff".into(),
                    value: UniformValue::Vec3([1.0e-6, 2.8e-6, 7.2e-6]),
                },
                ShaderUniform {
                    name: "umiecoeff".into(),
                    value: UniformValue::Float(8e-6),
                },
                ShaderUniform {
                    name: "umieg".into(),
                    value: UniformValue::Float(0.78),
                },
                ShaderUniform {
                    name: "usunintensity".into(),
                    value: UniformValue::Float(0.81),
                },
                ShaderUniform {
                    name: "uscaleheightrayleigh".into(),
                    value: UniformValue::Float(*crate::SCALEHEIGHT as f32),
                },
                ShaderUniform {
                    name: "uscaleheightmie".into(),
                    value: UniformValue::Float(20000.0),
                },
                ShaderUniform {
                    name: "uammoniaabsorption".into(),
                    value: UniformValue::Vec3([0.001, 0.0005, 0.0002]),
                },
            ],
        }
    }

    pub fn interiorocean() -> Self {
        Self {
            name: "metallichydrogen".to_string(),
            uniforms: vec![
                ShaderUniform {
                    name: "upressure".into(),
                    value: UniformValue::Float(400.0),
                },
                ShaderUniform {
                    name: "utemperature".into(),
                    value: UniformValue::Float(10000.0),
                },
                ShaderUniform {
                    name: "udeepcolor".into(),
                    value: UniformValue::Vec3([0.10, 0.08, 0.05]),
                },
                ShaderUniform {
                    name: "uemissive".into(),
                    value: UniformValue::Vec3([0.005, 0.005, 0.008]),
                },
            ],
        }
    }
}