|
|
|
|
@ -79,12 +79,12 @@ updateSatellitePosition(entity& satellite)
|
|
|
|
|
entSetWorldPosition(satellite, xform * glm::vec4(v.x, v.y, v.z, 1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: use validateEllipse(orbit.ep) before calling to avoid failing
|
|
|
|
|
// NOTE: use ellipseValidate(orbit.ep) before calling to avoid failing
|
|
|
|
|
// assertions
|
|
|
|
|
void |
|
|
|
|
updateOrbit(orbital_elements& orbit, ellipse_3d& e3d, entity& ellipse_entity) |
|
|
|
|
{ |
|
|
|
|
orbit.ep = constructEllipseAE(orbit.ep.a, orbit.ep.e); |
|
|
|
|
orbit.ep = ellipseInitAE(orbit.ep.a, orbit.ep.e); |
|
|
|
|
ellipse3DUpdate(orbit.ep, e3d); |
|
|
|
|
|
|
|
|
|
for (uint i = 0; i < e3d.vert_count; i++) |
|
|
|
|
@ -133,14 +133,15 @@ postFrameCallback(render_state* rs)
|
|
|
|
|
if (!ellipsesEqual(c_orb.ep, g_orbit.ep)) { |
|
|
|
|
// NOTE: handle the case where semimajor axis lowered with low
|
|
|
|
|
// eccentricity would fail validation
|
|
|
|
|
if (c_orb.ep.a < g_orbit.ep.a && c_orb.ep.a > 0 |
|
|
|
|
if (c_orb.ep.a < g_orbit.ep.a |
|
|
|
|
&& c_orb.ep.a > 0 |
|
|
|
|
&& c_orb.ep.e == g_orbit.ep.e) |
|
|
|
|
{ |
|
|
|
|
c_orb.ep.b = c_orb.ep.a * sqrt(1 - pow(c_orb.ep.e, 2.0)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (validateEllipse(c_orb.ep)) { |
|
|
|
|
c_orb.ep = constructEllipseAE(c_orb.ep.a, c_orb.ep.e); |
|
|
|
|
if (ellipseValidate(c_orb.ep)) { |
|
|
|
|
c_orb.ep = ellipseInitAE(c_orb.ep.a, c_orb.ep.e); |
|
|
|
|
g_orbit.ep = c_orb.ep; |
|
|
|
|
entity& ellipse_entity = rs->render_groups[0].entities[0]; |
|
|
|
|
updateOrbit(g_orbit, g_ellipse3d, ellipse_entity); |
|
|
|
|
@ -185,7 +186,7 @@ main()
|
|
|
|
|
|
|
|
|
|
// NOTE: semi-major axis in km, eccentricity, gravitational parameter
|
|
|
|
|
g_orbit = orbitInit(26564.5, 0.7411, 398601.68); |
|
|
|
|
ellipse_parameters ep = constructEllipseAB(g_orbit.ep.a, g_orbit.ep.b); |
|
|
|
|
ellipse_parameters ep = ellipseInitAB(g_orbit.ep.a, g_orbit.ep.b); |
|
|
|
|
|
|
|
|
|
// TODO: (renderer) this needs to be more convenient
|
|
|
|
|
shader_wrapper sw = { SIMPLE_SHADER, nullptr, rs->simple_shader }; |
|
|
|
|
@ -193,7 +194,7 @@ main()
|
|
|
|
|
rs->render_group_count = 1; |
|
|
|
|
|
|
|
|
|
entity& ellipse_entity = rs->render_groups[0].entities[0]; |
|
|
|
|
g_ellipse3d = constructEllipse3D(ep, 256); |
|
|
|
|
g_ellipse3d = ellipseInit3D(ep, 256); |
|
|
|
|
simple_mesh* sm = constructEllipseMesh(g_ellipse3d, glm::vec3(255, 0, 255)); |
|
|
|
|
entInitMesh(ellipse_entity, sm, GL_LINE_LOOP); |
|
|
|
|
entRotate(ellipse_entity, (float) M_PI_2, glm::vec3(1, 0, 0)); |
|
|
|
|
|