This is a post fragment I never finished writing back in Jul 2016. I’ve since shelved the project, so it’s mostly unedited.
It’s 23.8KB of program memory later and I’ve run out of RAM. The Arduino Uno I was using passed the 3D graphics test and even played nice when tracking absolute position and orientation, but when I tried to combine the two I had only 241 bytes left for local variables, when I need at least 512 to run for more than 10 frames. So today I decided to order a Teensy LC, which gives me more than enough space.
Speaking of frames, my current display, a 1.5″ from Adafruit controlled over SPI, takes 2 seconds per frame–way too slow. I’m switching to an uOLED-160-G2 made by 4D systems, which should be able to render fast enough and has some microcontroller capabilities of its own.
Project has design issues. 4D’s OLED wasn’t quite fast enough for my needs either–I need something purpose-built. If I ever take another stab at this project, the display portion will probably be mounted facing down, with custom optics that reflect the light into the user’s eyes. To address visibility issues since it would be a tiny LCD, I would need to put my own backlight driver in, and have the software match the ambient light.
On top of this, no Arduino runs fast enough to process all the transformations needed. I’d have to use a Raspberry Pi, and I think the Compute Module 4 would fit nicely. I’d also have to run the entire program on the GPU. I’m just now learning about shaders and GPU CV so this project will probably stay shelved for at least a couple more years.