Projects presentation

Szymon Ender

Slides work best with Chrome and Safari
Navigation is possible with keyboard cursors and mouse using the control at bottom right.
On all top level slides vertical navigation is also possible.

Launch MFD - Module for Orbiter

  • Orbiter is a realistic space flight simulator
  • Orbiter provides a rigorous test environment
  • MFD stands for MultiFunctional Display
  • Launch MFD is a complex system, not only MFD
  • Total lines of code: ~10,000

Launch MFD - User Interface

LaunchMFD

Launch MFD - Features

  • Azimuthal guidance
  • Pitch guidance (© NASA)
  • PID control (formerly Fuzzy control)
  • Direct ascent (Master thesis)
  • OOP & Open Source
  • Reusable code and few frameworks
  • Cooperation with international team
  • Extensive user and developer manual

TransX MFD - Module for Orbiter

TransX

  • Flexible interplanetary transfers planning tool
  • Legacy OSS project

TransX MFD - My improvements

  • Automatic solution finder - binary search based (fast & precise!) optimization task solver
  • Removed many original bottlenecks
  • Automatic vessel orientation - code reuse of PID based autopilot
  • Increased valuable data feedback to the user

TransX MFD - Manual solution finding

Trial and error approach

TransX

TransX MFD - Automatic solution finding

No slowdowns - user experience not degraded

TransX

HUD Drawer SDK - Library for Orbiter

LaunchMFD

  • Abstraction lets any kind of module draw on HUD
  • Full encapsulation of virtual table hijacking
  • Simple interface

HUD Drawer SDK - Example implementation

AxialVelHUD2::AxialVelHUD2( HINSTANCE hDLL )
: oapi::Module( hDLL )
{} // Automatic registering through base class' empty constructor

AxialVelHUD2::~AxialVelHUD2()
{} // Automatic unregistering through base class' destructor

bool AxialVelHUD2::ShouldDrawHUD() const
{
    return true;
}

const char * AxialVelHUD2::GetModuleName() const
{
    return "Axial Vel HUD 2";
}

void AxialVelHUD2::DrawHUD(int mode, const HUDPAINTSPEC *hps, 
			   oapi::Sketchpad * skp)
{
    int x = 200, y = 300;
    VESSEL * v = oapiGetFocusInterface();
    skp->Text(x, y, v->GetName());
    // ...
    // Code away!
    // ...
}
		

MDDClone–SDL

A multiplatform port of a 3D game from '80ties – Mercenary

OpenGL

OpenGL renderer

MDDClone–SDL

A multiplatform port of a 3D game from '80ties – Mercenary

OpenGL

Software renderer

Killers Behind You

A multiplatform 2D jump'n'run game

OpenGL

Thank you for your attention

Szymon Ender