celestialBodies = {
    Sun: new CelestialBody({
        name: "Sun",
        star: true,
        parent: "Sun",
        radius: 200.,
        shineColor: 0xfff700,
        orbit: {
            semiMajorAxis: 0.
        },
        rotation: {
            period: 2500,
            inclination: 0,
        },
        material: {
            type: "basic",
            diffuse: {map: "res/sol/diffuse.png"}
        },
        atmosphere: {
            cloud: {
                map: "res/sol/overlay.png",
                height: 1,
                speed: 1
            }
        },
        halo: {
            color: new THREE.Color(0xfff700),
            radius: 500.
        }
    }),
    Mercury: new CelestialBody({
        name: "Mercury",
        radius: 3.8256,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 1.204,
            semiMajorAxis: 387.1,
            eccentricity: 0.2056,
            inclination: 7.0049
        },
        rotation: {
            period: 1407.509405,
            inclination: 28.55,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/mercury/diffuse.jpg"},
            bump: {map: "res/mercury/bump.jpg", height: 0.}
        }
    }),
    Venus: new CelestialBody({
        name: "Venus",
        radius: 9.488,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 3.076,
            semiMajorAxis: 723.3,
            eccentricity: 0.0068,
            inclination: 3.3947
        },
        rotation: {
            period: 5832.443616,
            inclination: 157.16,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/venus/diffuse.jpg"},
            bump: {map: "res/venus/bump.jpg", height: 0.}
        },
        atmosphere: {
            cloud: {
                map: "res/venus/clouds.jpg",
                height: 0.5,
                speed: 0.02
            }
        }
    }),
    Earth: new CelestialBody({
        name: "Earth",
        radius: 10.,
        parent: "Sun",
        shineColor: 0x6666ff,
        orbit: {
            period: 5.,
            semiMajorAxis: 1000.,
            eccentricity: 0.0167,
            inclination: 0.0001
        },
        rotation: {
            period: 23.93447117,
            inclination: -23.4392911,
            meridianAngle: 280.147,
            offset: 0.
        },
        material: {
            type: "phong",
            diffuse: {map: "res/earth/diffuse.jpg"},
            specular: {map: "res/earth/spec.jpg", color: 0x243232, shininess: 25},
            bump: {map: "res/earth/bump.jpg", height: 0.05},
            night: {map: "res/earth/night.png"}
        },
        atmosphere: {
            cloud: {
                map: "res/earth/clouds.png",
                height: 0.1,
                speed: 0.02
            },
            scattering: true,
            atmosphereColor: new THREE.Vector3(0.5, 0.7, 0.8),
            sunsetColor: new THREE.Vector3(0.8, 0.7, 0.6),
            atmosphereStrength: 1.5,
            sunsetStrength: 1.0
        }
    }),
    Comet: new CelestialBody({
        name: "Comet",
        parent: "Sun",
        radius: 0,
        spherical: false,
        isComet: true,
        orbit: {
            period: 3.5,
            semiMajorAxis: 3000.,
            eccentricity: 0.5,
            inclination: 10.,
        },
    }),
    Ship: new CelestialBody({
        name: "Ship",
        parent: "Earth",
        radius: 0.2,
        spherical: false,
        obj: {
            path: "res/space/",
            objPath: "tiangong.obj",
            mtlPath: "tiangong.mtl",
            angle: -30,
            scale: 0.008,
        },
        orbit: {
            period: 1.0,
            semiMajorAxis: 15.,
            inclination: 30,
        },
        rotation: {
            period: 100.0,
            inclination: 0,
        },
    }),
    Astronaut: new CelestialBody({
        name: "Astronaut",
        parent: "Earth",
        radius: 0.05,
        spherical: false,
        obj: {
            path: "res/space/",
            objPath: "man.obj",
            mtlPath: null,
            scale: 0.008,
            angle: 235,
            x: 0.04,
            y: 0.02,
            z: 0.01,
        },
        orbit: {
            period: 1.0,
            semiMajorAxis: 15.,
            inclination: 30,
        },
        rotation: {
            period: 100.0,
            inclination: 0,
        },
    }),
    Moon: new CelestialBody({
        name: "Moon",
        radius: 2.7243,
        parent: "Earth",
        shineColor: 0xff9988,
        orbit: {
            period: 2.0749,
            semiMajorAxis: 25.,
            eccentricity: 0.0549,
            inclination: 5.15
        },
        rotation: {
            period: 655.2,
            inclination: 23.4608,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/moon/diffuse.jpg"},
            bump: {map: "res/moon/bump.jpg", height: 0.1}
        }
    }),
    Mars: new CelestialBody({
        name: "Mars",
        radius: 5.3226,
        parent: "Sun",
        shineColor: 0xff9988,
        orbit: {
            period: 9.4095,
            semiMajorAxis: 1523.7,
            eccentricity: 0.0934,
            inclination: 1.8506
        },
        rotation: {
            period: 24.622962156,
            inclination: 37.11350,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/mars/diffuse.jpg"},
            bump: {map: "res/mars/bump.jpg", height: 1.}
        },
        atmosphere: {
            scattering: true,
            atmosphereColor: new THREE.Vector3(0.9, 0.8, 0.6),
            sunsetColor: new THREE.Vector3(0.4, 0.5, 0.7),
            atmosphereStrength: 1.0,
            sunsetStrength: 0.9
        }
    }),
    Phobos: new CelestialBody({
        name: "Phobos",
        radius: 1,
        parent: "Mars",
        shineColor: 0xff9988,
        orbit: {
            period: 1.5945,
            semiMajorAxis: 20,
            eccentricity: 0.0151,
            inclination: 1.082
        },
        rotation: {
            period: 100.,
            inclination: 37.10,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/phobos/diffuse.jpg"},
            bump: {map: "res/phobos/bump.jpg", height: 10.}
        }
    }),
    Deimos: new CelestialBody({
        name: "Deimos",
        radius: 0.5,
        parent: "Mars",
        shineColor: 0xff9988,
        orbit: {
            period: 6.3122,
            semiMajorAxis: 30,
            eccentricity: 0.00033,
            inclination: 1.791
        },
        rotation: {
            period: 150.,
            inclination: 36.48,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/deimos/diffuse.jpg"},
            bump: {map: "res/deimos/bump.jpg", height: 10.}
        }
    }),
    Jupiter: new CelestialBody({
        name: "Jupiter",
        radius: 112.09,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 59.3,
            semiMajorAxis: 2000.,
            eccentricity: 0.0484,
            inclination: 1.3053
        },
        rotation: {
            period: 238.23,
            inclination: 2.22,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/jupiter/diffuse.jpg"},
        },
        atmosphere: {
            cloud: {
                map: "res/jupiter/clouds.png",
                height: 0.3,
                speed: 0.02
            },
            scattering: true,
            atmosphereColor: new THREE.Vector3(1.0, 0.8, 0.7),
            sunsetColor: new THREE.Vector3(0.7, 0.7, 0.8),
            atmosphereStrength: 1.8,
            sunsetStrength: 0.6
        },
    }),
    Callisto: new CelestialBody({
        name: "Callisto",
        radius: 4.0,
        parent: "Jupiter",
        shineColor: 0xff9988,
        orbit: {
            period: 2.49,
            semiMajorAxis: 200.,
            eccentricity: 0.0045045,
            inclination: 0.384285,
        },
        rotation: {
            period: 100.,
            inclination: 25.51,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/callisto/diffuse.jpg"},
        }
    }),
    Europa: new CelestialBody({
        name: "Europa",
        radius: 3.0,
        parent: "Jupiter",
        shineColor: 0xff9988,
        orbit: {
            period: 17.76,
            semiMajorAxis: 160.,
            eccentricity: 0.0101,
            inclination: 0.470,
        },
        rotation: {
            period: 150.,
            inclination: 25.49,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/europa/diffuse.jpg"},
        }
    }),
    Io: new CelestialBody({
        name: "Io",
        radius: 3.0,
        parent: "Jupiter",
        shineColor: 0xff9988,
        orbit: {
            period: 8.85,
            semiMajorAxis: 100.,
            eccentricity: 0.0041,
            inclination: 0.040,
        },
        rotation: {
            period: 100.,
            inclination: 25.50,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/io/diffuse.png"},
        }
    }),
    Saturn: new CelestialBody({
        name: "Saturn",
        radius: 94.49,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 40.0,
            semiMajorAxis: 2500.,
            eccentricity: 0.0542,
            inclination: 2.4845
        },
        rotation: {
            period: 255.75,
            inclination: 28.052,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/saturn/diffuse.png"},
            bump: {map: "res/saturn/bump.png"},
        },
        atmosphere: {
            cloud: {
                map: "res/saturn/clouds.png",
                height: 0.5,
                speed: 0.05
            },
            scattering: true,
            atmosphereColor: new THREE.Vector3(0.8, 0.7, 0.5),
            sunsetColor: new THREE.Vector3(0.7, 0.7, 0.8),
            atmosphereStrength: 1.5,
            sunsetStrength: 0.8
        },
        ring: {
            map: "res/saturn/ring.png",
            lower: 5,
            higher: 80,
        }
    }),
    Dione: new CelestialBody({
        name: "Dione",
        radius: 5.0,
        parent: "Saturn",
        shineColor: 0xff9988,
        orbit: {
            period: 3.0,
            semiMajorAxis: 200.,
            eccentricity: 0.05,
            inclination: 0.0049,
        },
        rotation: {
            period: 130.,
            inclination: 22.9,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/dione/diffuse.jpg"},
        }
    }),
    Titan: new CelestialBody({
        name: "Titan",
        radius: 6.0,
        parent: "Saturn",
        shineColor: 0xff9988,
        orbit: {
            period: 4.0,
            semiMajorAxis: 150.,
            eccentricity: 0.05,
            inclination: 0.0049,
        },
        rotation: {
            period: 120.,
            inclination: 1.53,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/titan/diffuse.jpg"},
        }
    }),
    Uranus: new CelestialBody({
        name: "Uranus",
        radius: 40.07,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 420.069,
            semiMajorAxis: 3000.,
            eccentricity: 0.0472,
            inclination: 0.7699
        },
        rotation: {
            period: 413.76,
            inclination: 97.722,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/uranus/diffuse.jpg"},
        },
        ring: {
            map: "res/uranus/ring.png",
            lower: 10,
            higher: 20,
        },
        atmosphere: {
            scattering: true,
            atmosphereColor: new THREE.Vector3(0.5, 0.9, 0.7),
            sunsetColor: new THREE.Vector3(0.7, 0.9, 0.8),
            atmosphereStrength: 0.2,
            sunsetStrength: 0.7
        },
    }),
    Neptune: new CelestialBody({
        name: "Neptune",
        radius: 38.83,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 823.965,
            semiMajorAxis: 3500.,
            eccentricity: 0.0097,
            inclination: 1.7692
        },
        rotation: {
            period: 386.64,
            inclination: 28.03,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/neptune/diffuse.jpg"},
        },
        ring: {
            map: "res/neptune/ring.png",
            lower: 10,
            higher: 20,
        }
    }),
    Pluto: new CelestialBody({
        name: "Pluto",
        radius: 15.,
        parent: "Sun",
        shineColor: 0x9999ff,
        orbit: {
            period: 32.0,
            semiMajorAxis: 4000.,
            eccentricity: 0.2482,
            inclination: 17.1449
        },
        rotation: {
            period: 153.292944,
            inclination: 115.60,
            meridianAngle: 0.,
            offset: 0.
        },
        material: {
            type: "lambert",
            diffuse: {map: "res/pluto/diffuse.jpg"},
        },
    }),
}
