The block follows the same “inheritance” approach like three.js does. Every object that can be added to the Scene shared_ptr is inherited from the base class “Object3D” (the same name as three). The Mesh, Camera, Lights and Instancer classes are examples of this pattern. A separate Renderer is also initiated and used to render the Scene using a Camera ( or Scene’s primary Camera). Renderers have different types such as basic (just calls the draw method of objects), Forward and Deferred and each type observes the Scene with custom helpers to deliver an efficient render.
Of course this is block is not at all meant to be the definitive or most optimal way of working with libcinder’s framework. As you can read by Cinder’s creators and users on its forums, libcinder is meant to be an easy/performant way of making your own custom renderers/engines for different projects. The reason behind releasing it was mainly to attract the attention of many three.js users who can bear to code in C++ and let them experiment with all the advantages and goodies that libcinder offers and feel at home to some extent. The block only adds a thin layer over Cinder to facilitate this process. It even might be interesting for people wanting to export for web and need the speed of C++, because as I’m writing this the emscripten port of libcinder is in the works and though harder than three.js, web apps are also accessible.
Edit: I changed the block’s name to 3MO (three mimicked objects) and it lives here. Warning: It’s hardly at the alpha stage and it’s a lot messy and some of the functions don’t work correctly.