Ravendyne Inc

MME on

MME aims to provide simple way of creating and rendering 3D content by combining scene objects into a tree hierarchy called a scene. This is considered a high-level layer of MME desing.

Second important aim of MME is to provide a fairly simple way of adding new ways to render 3D content. This is done by implementing a new GLSL shader together with supporting Haxe code that integrates the shader into MME. This part is considered a low-level layer of MME design.

So, MME has two layers:

  • high-level: this is where all 3D-content related classes live (cameras, lights, meshes, boxes, planes, etc. etc. all that fun stuff)
  • low-level: this is what translates high-level stuff to OpenGL API realm (think shaders, geometry buffers, API calls, rendering engine, etc. etc. all that fun stuff :) )

A sample scene might be constructed like this:

    var scene = new Scene();

    var camera = new PerspectiveCamera( 60, window.width / window.height, 1, 5000 );
    camera.translate([ 0, 0, 1000 ]);
    scene.addCamera( camera );

    var light = new PointLight();
    light.translate([ 500, 500, 750 ]);
    scene.addLight( light );

    scene.addLight( new AmbientLight() );

    var box = new Box( 300, 300, new PhongMaterial( NamedColor.green ) );
    box.rotate( 45, Vec3.Y_AXIS );
    box.rotate( 45, Vec3.X_AXIS );
    scene.add( box );

    var renderer = new Renderer( window.context.webgl );

and then in lime.app.Application.onRender() override you would have to call:

    renderer.render( context.webgl, scene );

By doing that, after building and running the app, you may end up with a window looking like this:

Mini Mighty Engine sample

MME also provides simple support for text and text labels (by implementing font atlas), pseudo-2D graphics (lines, polylines, beziers, etc. all rendered with z-coordinate initially set to 0), parametric surface generators, STL and OBJ/MTL loaders etc.

For more details, checkout the README.