MoMath - The Mathenaeum
Scope: Custom Software
The Mathenaeum is a polyhedron builder exhibit at the Museum of Mathematics in New York City where visitors are able to model complex virtual shapes in three dimensions. The hardware component of the Mathenaeum is striking. The Mathenaeum area contains three work stations with large flat screens and a steam-punk styled control system composed of a large trackball (made from a bowling ball without any holes), a button, gear shift and a throttle. With these controls it’s possible to rotate the onscreen object and control the character and magnitude of many stylizations and manipulations. The variety of functions available to the user allows for an almost limitless variety of forms and complexities that can be created against an ethereal black background.
The objects created are stored in 3Byte's. API/CMS system, and are voted on by people on a scoreboard. The most creative objects are then 3D printed and placed in a display case.
The physical interface was a trackball, gearshift and throttle, RFID reader, 3D printer, and 5 Arduino PLC's with 2" Mini Display Screens, was using only one thread for trackball and input polling (both emulated with the mouse). Replicating the deployment environment meant enforcing a threading context which was consistent in both places. In retrospect, this change was obvious and easy to implement, but I hadn’t yet realized the importance of automated stress testing.
The Mathenaeum exhibit is a highly optimized, multi-threaded piece of 3D graphics software written in C++ with OpenGL and the Cinder framework. The algorithms employed for manipulating complex objects across a wide range of geometric manipulations and across multiple threads were challenging, but for us the most challenging and edifying part of this project was the problem of hardware integration and effective testing. More specifically, working on the Mathenaeum taught us about the difficulties associated with and the creativity required for effective testing. Concretely, the Mathenaeum explicitly spawns four distinct threads: a) a render-loop thread, b) a trackball polling thread, c) an input polling thread, d) a local visitor/RFID tag polling thread.
- Rendering Software- C++/Cinder/OpenGL
- Scoreboard Software- C#/WPF
- Arduino- Java(ish)
- Sam (2)