hello bongobat. I've implemented less than you imagine! not having any access to a DLP projector, I haven't made any sync or mods. That stuff is required to make a projector capable of projecting over 180fps greyscale images. the fundamental scanning technique takes 3 still images and turns them into a 3d model; if you mod a DLP projector and sync a video camera you can therefore capture 3d models at 180/3=60 frames per second. this is also made possible by the fact that the algorithm to reconstruct the model from the images is simple enough to run in 1/60th of a second. this is also the clue: if it's simple enough to run in 1/60th, it's simple enough to write in a few hours
so long as you can create 3 images of your object without object or camera moving, and where you have projected 3 images of grayscale horizontal lines (or vertical) you can reconstruct the mesh. the idea is similar to david laser scanning; you are looking for the vertical deformation of a known straight line (the laser line). however instead of projecting/measuring one line at a time, you project a whole image of lines. further, rather than looking for a bright line on a dark ground, you look for the vertical shift of a known pattern (in this case, horizontal stripes that you know are in a sine-wave pattern, also known as fringes due to their ability to be constructed using interference patterns; but in this case I just use a projector). in theory you can do this with a single image, and see the deformation of the lines up and down (you can see it in the attached images from my last post). however if you project 3 images with the sinewaves shifted ('scrolled') by 1/3 of a stripe each time, then you can use some simple maths such that each pixel can be computed independently. this maths tells you where on the wave (crest, or high part, or low part, whever) the pixel lies. this is the phase! once you know where you lie 'within' a particular stripe, you have to be able to tell one stripe from another (ie, all stripes look the same, so how do I know if a given pixel is from the first one, or an offset version of the 2nd? etc). this is the unwrapping process. my code does this unwrapping step by walking pixel by pixel around the image, measuring the 'confidence' it has in whether one pixel relates to the same stripe as its neighbour. generally, it can be confident enough to fill in all the pixels in relation to the neighbour, at least for objects without too much self occlusion.
all of this relies on reliably measuring where you are in the stripe, it accurately measuring the greyscale image and relating it to the original sinewave pattern that was sent to the projector; any distortion of brightness (not shape! just brightness) leads to ridges.
there are many other more simple structured light approaches, but they either require more complex code, or more input images to generate a scan. the phase-based stuff seemed like a sweet spot between complexity of setup, and complexity of code. that said, until I write some calibration code to remove the ridges successfully, it's not worth much. a simpler approach requiring less calibration could (for example) extract a 256x256 mesh by using a sequence of 16 projected binary images.