I made a 3D maze game called ma3e for iPhone and iPad. It has procedurally generated levels and uses the Bullet physics engine. I’ve learned a few things you might find useful over the course of creating the app.
On Mac OS: cmd-tab is the Mac version of Windows’s alt-tab, but it switches between programs instead of windows, and it doesn’t unminimize them. Use cmd-` to switch between windows within a program, and hold option before releasing cmd to unminimize.
On shaders in Xcode: Xcode doesn’t recognize its own suggested file extension for fragment and vertex shaders. When you add a shader to your project, it will be treated as a source file. Shaders are compiled by the graphics card at runtime, so this will not work. Xcode will complain that it doesn’t know how to compile a shader. To fix this, click on the project in the “project navigator”, click on your target under “targets” if it’s not already selected, go to the “build phases” tab, and remove the shader from “compile sources”. Xcode assumes it can compile the file, so like other compilable files, it doesn’t bundle the file as a runtime resource. So when it comes time to compile the shader at runtime, the file is not found. You can fix this in almost the same spot as before, just go to “copy bundle resources” instead of “compile sources” and add the shader there. Congratulations! You should now hate Apple a bit more.
On resizing images: use CGContextSetInterpolationQuality to manually resize images with better interpolation than default.
On in-app purchases: they are fairly painful to implement, at least the first time. Don’t bother with security. Someone with a jailbroken phone who doesn’t want to pay for your in-app purchases probably wont anyway.
On marching cubes: it exists! It’s cool! It’s a way to get from a 3D function to a 2D surface.
On reflections: At one point, I wanted to have reflections via cube maps. I ended up dropping it when I realized the object wasn’t reflecting itself, which was a problem when the object was a 3D maze. Too much light, broke assumptions your brain made, and just decreased ease of perception of the maze. But I did find this guy and I also found Hugin which is the best open source omnirama-capable photostitcher I could find. See at one point I was planning on making my own cube maps. Hugin doesn’t have support for making cube maps directly right now, but I’m hopeful in future. Also, if you have a typical camera and no wide-angle lens like me, take a lot of pictures.